【问题标题】:Qt Application and window Icon under windowswindows下的Qt应用和window图标
【发布时间】:2011-09-25 06:25:07
【问题描述】:

我通过嵌入包含图标的标准 Windows 资源文件创建了一个简单的应用程序图标。但是我也想在我的主应用程序窗口上使用这个图标。是否有捷径可寻?到目前为止,似乎唯一的方法是单独加载包含窗口图标的图标,而不是重用已经存在的图标。这似乎是一个可怕的解决方案。除其他外,实际图标嵌入在我的可执行文件中,我不想分发它两次。

有人知道怎么做吗?

【问题讨论】:

  • 你使用的是QT资源机制吗? (*qrc) 因为那样你就可以很容易地做到这一点。 doc.qt.nokia.com/latest/resources.html
  • @PoweRoy:干杯,但我在发布问题后 15 分钟左右找到了答案,通常是 :)

标签: c++ windows qt icons


【解决方案1】:

其实...原来它非常非常简单...

HICON       hIcon   = (HICON)LoadImage( GetModuleHandle( nullptr ), MAKEINTRESOURCE( IDI_ICON1 ), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT );

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

::DestroyIcon( hIcon );

【讨论】:

  • 所有这些标识符是在哪里定义的?我试了试运气,但一切都没有申报。谢谢。
  • 在 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 );
【解决方案2】:

我认为 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 调用,并且您的代码保持可移植性。 不幸的是,每个平台的 SEttign 应用程序图标都不同。所以如果你想要可移植的代码,你真的应该避免原生调用。

【讨论】:

  • 嵌入两次是一个糟糕的解决方案,IMO。我宁愿在一个地方使用特定于平台的#define。
  • @Goz ~10KB 的便携性是一个很好的解决方案
  • 考虑到 QT dll 是几兆,几 KB 并不能拯救任何人。
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多