C++ 在Windows上获取默认应用程序图标
我想从C++ 在Windows上获取默认应用程序图标,c++,qt,windows-applications,C++,Qt,Windows Applications,我想从QFileIconProvider获取默认应用程序图标,但只有: 枚举QFileIconProvider::IconType QFileIconProvider::Computer QFileIconProvider::Desktop QFileIconProvider::Trashcan QFileIconProvider::Network QFileIconProvider::Drive QFileIconProvider::Folder QFileIconPr
QFileIconProvider
获取默认应用程序图标,但只有:
枚举QFileIconProvider::IconType
QFileIconProvider::Computer
QFileIconProvider::Desktop
QFileIconProvider::Trashcan
QFileIconProvider::Network
QFileIconProvider::Drive
QFileIconProvider::Folder
QFileIconProvider::File
屏幕截图:
QIcon icon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
我可以使用QFileIconProvider
导航到一些没有图标的系统可执行文件,以获取此默认图标,但我认为应该有另一种方法。
如何获取此图标?谢谢
更新:
QIcon icon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
我已找到默认应用程序图标的标识符-
IDI_应用程序
。现在的问题是如何将其转换为QIcon
或QString
?我尝试了QString::fromWCharArray(IDI_应用程序)
和QString::fromStdWString(IDI_应用程序)
,但不起作用,应用程序崩溃。如何转换?谢谢。我找到了解决办法
代码:
QIcon icon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
现在它可以工作了。您还可以从应用程序对象获取默认图标。 (可在所有平台上工作。) 文档链接: 该功能在
qgui应用程序中可用
QApplication
继承的QGuiApplication
看起来不像这样。也许没有一个好的跨平台图标?如果您只是在Windows中需要它,我可以告诉您如何使用标准的Windows API调用检索图标。@CodyGray是的,我只在Windows中需要它。应用程序是一个文件(而不是任何其他文件),这是我在没有图标的应用程序中获得的图标。我认为这实际上是默认的应用程序图标。@CodyGray我发现IDI_应用程序
设置了此默认图标,但如何将其转换为QIcon
或从MAKEINTRESOURCE
生成QString
?谢谢。@KennyOstrom是的,但它不显示任何图标或显示默认文件夹图标。所以我应该得到默认的应用程序图标。谢谢。但是,如果我的项目应用程序已经有图标,并且我希望在QLabel
中设置默认图标,该怎么办?然后这将返回非默认值。是的,这是有效的。只有一个问题:如果调用LoadIcon
,您将始终获得32x32图标。如果这是你需要的,那么这个就可以了。如果你想要一个更小的图标(比如标准的16x16大小),你就不会得到它;充其量,系统会尝试缩小32x32图标的比例,这样看起来会很难看。有一些新的API可以处理这些其他图标大小,但它们比使用2个简单参数的旧的LoadIcon
更难调用。@CodyGray Hi!是的,32x32图标在我的情况下很好。唯一的想法是,它是Vista&7旧式图标,在Win 10中看起来不太好。因此,我从chkdsk.exe
(QFileIconProvider
)获得了一个新的应用程序图标。对于新的Win 10应用程序图标,是否有类似于IDI_应用程序
的标识符?谢谢。呃,IDI_应用程序应该返回当前操作系统的通用应用程序图标。它在Windows10中应该可以正常工作。(如果不是,那么这是一个新问题——“为什么LoadIcon(NULL,IDI_应用程序)
在Windows 10上返回老式的Vista/7图标?”不过,您提到了chkdsk.exe,这有点令人困惑,因为它没有使用通用应用程序图标。它有自己的自定义图标,嵌入到二进制文件中。@CodyGray这很奇怪,因为我只从chkdsk.exe
中获取默认图标。屏幕截图:。