.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>
还尝试使用<qresource prefix="/">
。
来自 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.dll
和qicod4.dll
(如果您在调试模式下构建)存在。
@doc 请为未来的谷歌访问者写下这个讨论,我愿意接受它作为答案。
【参考方案1】:
对于未来的谷歌访问者:您可以阅读问题下的 cmets,因为这是此答案的诞生地。
所以问题是QIcon
默认不支持ico
格式,你需要一个插件来解决这个问题。在这种情况下,QImageReader::supportedImageFormats()
函数列出了 QIcon 支持的格式可能会有所帮助。
如果您的格式不受支持,您可以尝试将 Qt 的 plugins
目录中的 imageformats
文件夹复制到可执行文件所在的目录中。如果您的应用程序位于 c:\myapp
文件夹中,您应该有 c:\myapp\imageformats
文件夹(而不是 c:\myapp\plugins\imageformats
)。否则,您必须使用QCoreApplication::addLibraryPath
设置路径。
还要确保qico4.dll
和qicod4.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 上显示的主要内容,如果未能解决你的问题,请参考以下文章