.ico 图标未在 Windows 上显示

Posted

技术标签:

【中文标题】.ico 图标未在 Windows 上显示【英文标题】:.ico icons not showing up on Windows 【发布时间】:2012-12-03 05:12:02 【问题描述】:

我按照The Qt Resource System 指南进行操作,.ico 图标出现在 Linux 上。

当我尝试从 Qt Creator 运行应用程序时,图标未显示在 Windows 上。

怀疑基于Qt/C++: Icons not showing up when program is run under windows O.S 的插件问题,但我无法从指南How to Create Qt Plugins 中弄清楚该怎么做。

是插件问题还是 Windows 上没有显示图标?

如果是插件问题:如何告诉我的应用程序在哪里可以找到 qico.dll?


环境细节:

适用于:Kubuntu 12.04 LTS、Qt Creator 2.4.1 和 Qt 4.7.4(64 位)

失败:Windows XP SP2 32 位、Qt Creator 2.4.1 和 Qt 4.7.4(32 位)

Everything 是默认设置(开箱即用),我没有弄乱设置。

resources.qrc

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

还尝试使用&lt;qresource prefix="/"&gt;

来自 application.pro

RESOURCES += \
    resources.qrc

OTHER_FILES += \
    images/spreadsheet.ico

在对应的源文件

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

我也试过Deploying an Application on Windows写的

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

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

app.addLibraryPath(plugins.absolutePath());

使用插件目录中的 qico.dll。它应用程序打印插件目录存在,但图标仍然不显示。

我再说一遍:它适用于 Linux。

【问题讨论】:

“不显示”是指它们没有出现在您的应用程序中,还是它们没有在磁盘上生成? @IanAtkin 他们没有出现在我的应用程序中。 @Ali 这很关键。因为如果 QIcon 不支持ico 格式,那你就有答案了。您应该使用QImageReader::supportedImageFormats () 函数列出支持的格式,并查看您的Windows 机器上是否存在ico @Ali 首先尝试列出格式。你确定你有正确路径中的插件吗? imageformats 应该在应用程序文件夹中(所以如果你的应用程序在 c:\myapp 你应该有 c:\myapp\imageformats 文件夹而不是 c:\myapp\plugins\imageformats)并且你不必设置任何东西。还要确保qico4.dllqicod4.dll(如果您在调试模式下构建)存在。 @doc 请为未来的谷歌访问者写下这个讨论,我愿意接受它作为答案。 【参考方案1】:

对于未来的谷歌访问者:您可以阅读问题下的 cmets,因为这是此答案的诞生地。

所以问题是QIcon 默认不支持ico 格式,你需要一个插件来解决这个问题。在这种情况下,QImageReader::supportedImageFormats() 函数列出了 QIcon 支持的格式可能会有所帮助。

如果您的格式不受支持,您可以尝试将 Qt 的 plugins 目录中的 imageformats 文件夹复制到可执行文件所在的目录中。如果您的应用程序位于 c:\myapp 文件夹中,您应该有 c:\myapp\imageformats 文件夹(而不是 c:\myapp\plugins\imageformats)。否则,您必须使用QCoreApplication::addLibraryPath 设置路径。

还要确保qico4.dllqicod4.dll(如果您在调试模式下构建)存在。

【讨论】:

【参考方案2】:

只是详细说明QCoreApplication::addLibraryPath-thing:

您需要使“plugins”文件夹可用。不是子文件夹!

这是 Python/PySide 用户使用 PySide 包位置的一种方式。你也可以只使用你的QtGui.QApplication 实例,这里是app,如果你已经有的话:

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

感谢doc

【讨论】:

以上是关于.ico 图标未在 Windows 上显示的主要内容,如果未能解决你的问题,请参考以下文章

为啥大网站做的网站ICO图标能显示,我在线制作却不能显示

怎么给WordPress网站制作favicon.ico图标

QT修改mainwindow前的图标,在资源管理器上显示图标也改变

如何在网站上安装Favicon.ico识别图标

ICO图标的制作和实际应用场景

如何制作ico图标?