QApplication::setWindowIcon 适用于 Windows XP,但不适用于 Windows 7

Posted

技术标签:

【中文标题】QApplication::setWindowIcon 适用于 Windows XP,但不适用于 Windows 7【英文标题】:QApplication::setWindowIcon works on Windows XP, but does not work on Windows 7 【发布时间】:2013-11-04 10:12:19 【问题描述】:

在一个像这样开始的简单 Qt 应用程序中:

int main(int argc, char* argv[])

  QApplication app(argc, argv);
  app.setWindowIcon(QIcon(":/qapp/appicon.ico"));
...

我们在第二行设置图标(这一行和资源中的图标文件是我的测试程序和Qt向导生成的应用程序之间的唯一区别)。此应用程序在 Windows XP 上完美运行,但在 Windows 7 上,我们无法在窗口左上角看到我们的图标(系统显示默认图标而不是我的 appicon.ico)。

开发者电脑配置:

Windows XP-SP3, Qt 5.1, MSVS2010-SP1。

更新:

开发商的操作系统是Windows XP,所以我们有一个临时的答案。当我们在装有 Windows 7 的计算机上编译此应用程序时,问题消失了(应用程序在 WinXP 和 Win7 上正确显示图标)。所以现在我们必须在 Windows 7 上编译这个应用程序的版本。但这看起来不是完美的解决方案。

您有什么想法,如何更好地解决这个问题?

【问题讨论】:

我不确定,但我会先尝试将*.ico 文件替换为png 图像文件。我怀疑,读取 ico 文件取决于系统(Windows)。 感谢您提出这个想法!我会测试它。但我不明白,如何在一个 png 图像文件中放入多种尺寸(16x16、24x24、32x32、64x64、128x128 和 256x256),就像对图标文件所做的那样。你有想法怎么做吗? 我会使用分辨率和尺寸最高的图像。嗯,但是为什么你需要有 256x256 的窗口图标呢? 这是 Microsoft 的建议(以保证新系统中的正确可视化)。 【参考方案1】:

类似的问题是.ico icons not showing up on Windows。 解决方法很简单:

在应用程序目录中创建目录imageformats, 把qico.dll复制进去。

没有这个插件 QIcon 无法读取 .ico 文件。所以问题不在 Windows 7 和 Windows XP 中。问题出在不同计算机上的默认路径变量中。

【讨论】:

【参考方案2】:

我猜你必须创建一个资源文件windows_icon.rc,内容如下:

IDI_ICON1               ICON    DISCARDABLE     "images/app-icon-48.ico"

并将这一行添加到您应用的 .pro 文件中:

RC_FILE = windows_icon.rc

这是您在 Windows 上设置应用程序图标的方式(成为 exe 文件图标的那个)

【讨论】:

谢谢。实际上,它已经完成并且可以工作,但是 exe 文件上的图标不是我们的问题。我们需要把我们的图标放在窗口的标题上。

以上是关于QApplication::setWindowIcon 适用于 Windows XP,但不适用于 Windows 7的主要内容,如果未能解决你的问题,请参考以下文章