Qt 应用程序在 Windows 下的窗口图标

4
我已经通过嵌入一个包含图标的标准Windows资源文件来创建一个简单的应用程序图标。 但是我还想在我的主应用程序窗口中使用这个图标。 有没有一种简单的方法可以做到这一点? 到目前为止,似乎唯一的方法是单独加载一个包含窗口图标的图标,而不是重用已经存在的图标。 这似乎是一个可怕的解决方案。 此外,实际图标嵌入在我的可执行文件中,我不想将其分发两次。
有人知道如何做到这一点吗?

3
你是否使用了QT的资源机制?(*qrc) 如果是的话,你可以很容易地完成这个任务。http://doc.qt.nokia.com/latest/resources.html - RvdK
1
@PoweRoy:谢谢,但是我发帖问问题后大约15分钟就找到答案了,典型的 :) - Goz
2个回答

7
实际上...结果证明这非常非常简单...
HICON       hIcon   = (HICON)LoadImage( GetModuleHandle( nullptr ), MAKEINTRESOURCE( IDI_ICON1 ), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT );

setWindowIcon( QIcon( QtWin::fromWinHICON( hIcon ) ) );

::DestroyIcon( hIcon );

所有这些标识符都定义在哪里?我尝试了一下,但是所有的东西都是未声明的。谢谢。 - Nuno
在Qt 5中,代码如下: #include <QtWinExtras/QtWin> /* ... */ HICON hIcon = (HICON)LoadImage( GetModuleHandle( nullptr ), MAKEINTRESOURCE( IDI_ICON1), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT ); this->setWindowIcon( QIcon( QtWin::fromHICON( hIcon ) ) ); ::DestroyIcon( hIcon ); - KungPhoo

5

我认为Goz的帖子很适合你的问题。 但是,如果你想避免使用本地Windows API(实际上这是首选的,因为设置应用程序图标是与平台相关的),我会选择这种看似不太优雅的方法:

1) in your .pro file:

   win32:RC_FILE=your_rcfile_with_icon.rc
   RESOURCES += qt_Resource_file.qrc

2) Add the same icon as in your .rc file to the qt .qrc file (i.e. embedd it twice)

3) in your main file:

   setWindowIcon(QIcon(":/the_icon.ico"));

这样可以避免使用本地API调用,使您的代码保持可移植性。不幸的是,为每个平台设置应用程序图标是不同的。因此,如果您想要可移植的代码,确实应该避免使用本地调用。


1
在我的看法中,嵌套两次是一个可怕的解决方案。我更喜欢在一个地方使用特定于平台的 #define。 - Goz
1
@Goz ~10KB 的可移植性是一个很好的解决方案。 - Inverse
考虑到 QT dll 文件只有几兆,节省几千字节对任何人都没有帮助。 - Gall Annonim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接