【问题标题】:.ico icons not showing up on Windows.ico 图标未在 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 请为未来的谷歌访问者写下这个讨论,我愿意接受它作为答案。

标签: qt plugins icons toolbar ico


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 2012-03-19
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多