Question

I followed the The Qt Resource System guide and the .ico icons appear on Linux.

The icons are not showing up on Windows when I try to run the applicaton from Qt Creator.

I suspect a plugin issue based on Qt/C++: Icons not showing up when program is run under windows O.S but I failed to figure out what to do from the guide How to Create Qt Plugins.

Is it a plugin issue or why aren't the icons showing up on Windows?

If it is a plugin issue: How do I tell my applicaton where to find the qico.dll?


Details of the environment:

Works on: Kubuntu 12.04 LTS, Qt Creator 2.4.1 and Qt 4.7.4 (64 bit)

Fails on: Windows XP SP2 32 bit, Qt Creator 2.4.1 and Qt 4.7.4 (32 bit)

Everyting is at its default (as installed out of the box), I did not mess with the settings.

resources.qrc

<!DOCTYPE RCC><RCC version="1.0">
    <qresource>
        <file>images/spreadsheet.ico</file>
    </qresource>
</RCC>

Also tried with <qresource prefix="/">.

From the applicaton.pro

RESOURCES += \
    resources.qrc

OTHER_FILES += \
    images/spreadsheet.ico

In the corresponding source file

QIcon(":/images/spreadsheet.ico")

I also tried as written in Deploying an Application on Windows

QDir plugins(QCoreApplication::applicationDirPath()+"/plugins");

qDebug() << "Plugin directory" << plugins.absolutePath() << "found?" << plugins.exists();

app.addLibraryPath(plugins.absolutePath());

with the qico.dll in the plugins directory. It application prints that the plugins directory exists but the icons still don't show up.

I repeat: it works on Linux.

Was it helpful?

Solution

For future google visitors: you may read comments under the question, because this is where this answer was born.

So the problem is that ico format is not supported by QIcon by default and you need a plugin for this. In such cases QImageReader::supportedImageFormats() function, which lists formats supported by QIcon may be helpful.

In case your format is not supported, you may try to copy imageformats folder from Qt's plugins directory into directory where your executable resides. If your app lies in c:\myapp folder you should have c:\myapp\imageformats folder (not c:\myapp\plugins\imageformats). Otherwise you have to set paths using QCoreApplication::addLibraryPath.

Also make sure that qico4.dll and qicod4.dll (if you build in debug mode) are there.

OTHER TIPS

Just to elaborate on the QCoreApplication::addLibraryPath-thing:

You need to make the "plugins"-folder available. Not the subfolders!

Here is a way for Python/PySide users to use the PySide package location. You can also just use your QtGui.QApplication instance, which is app here, if you have one already:

pyside_plugin_path = os.path.join(sys.modules['PySide'].__path__[0], 'plugins')
app.addLibraryPath(pyside_plugin_path)

And thanks already to doc!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top