Simon
Qt
Posted by Simon
 in Qt
 on Saturday, December 16, 2006 @ 16:38

It’s time for another lazy Saturday afternoon blog entry. Lazy because that’s how I like Saturdays. No emails that need answering, no tasks that need fixing, just doing what I feel like. Sometimes hacking, sometimes making music, sometimes chatting. And almost traditionally some good Italian food. But let’s digress towards a neat feature in Qt 4.3 that Girish and I implemented on Thursday.

Have you ever used QMimeSourceFactory in Qt 3? Yes yes, that mysterious class that tries to solve so many problems with a name that is totally unrelated to any of them. For example it helps to locate images embedded in HTML markup in labels and tooltips. You could just write …

QMimeSourceFactory::defaultFactory()->addFilePath(QDir::homePath() + "/images");

QToolTip::add(widget, "<h1>Blah...</h1> Foo <img src="example.png"/>...");

… and when the tooltip is shown it would locate example.png in $HOME/images. That is because Qt 3’s richtext module used QMimeSourceFactory to locate resources like that.

Now in Qt 4 we moved all the functionality that QMimeSourceFactory provided into their respective locations. For example through QTextBrowser’s searchPaths() property or QTextDocument’s addResource() / loadResource() functions. Or through the introduction of the Qt Resource System. Unfortunately we kind of overlooked the use-case where one wants to reference images on the filesystem from tooltips or labels with relative paths only. Of course it is possible to still make that working, for example by implementing a pseudo file engine. But that’s not as convenient as one simple method call like in Qt 3. After quite a bit of discussion (with Jasmin and Andreas) we think we’ve found a nice solution. Say ‘hello’ to QDir’s search paths:

QDir::addSearchPath("icons", QDir::homePath() + "/images");

widget->setToolTip("...by pressing the <img src="icons:delete.png"/> button ...");
QFile f("icons:thumbnails/landscape.png");
QStringList allThumbs = QDir("icons:thumbnails/").entryList();

I think this is mostly self-explaining :). Since it is implemented at the file engine level it works with anything that uses them, including QFile and QDir of course.

And as usual a note of warning: APIs in snapshots may change ;-). It’s all subject to change, as much as the wheather here in Oslo. But while it is finally cooling down here (giving hope for snow after Christmas) Qt development is only heating up. I like it that way :)

I also observed that pictures help to grab people’s attention for blogs. But since I can’t really post a screenshot of the header file I decided to post a picture of the self-made pizza I’ve just had instead (with Pesto, Rucola, Buffalo Mozzarella, Avocado, Olives and Mushrooms):


Yummy self-made Pizza with plenty of Italian ingredients

2 Responses to “Locating Files”

» Posted by anonymous
 on Sunday, December 17, 2006 @ 20:14

Veggie pizza, eh?

» Posted by Jesper T.
 on Sunday, December 17, 2006 @ 21:21

And you didn’t bring any of that pizza with you to the board gaming?! Shame on you!



© 2008 Nokia Corporation and/or its subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation in Finland and/or other countries worldwide.
All other trademarks are property of their respective owners.