Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows上获取默认应用程序图标_C++_Qt_Windows Applications - Fatal编程技术网

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
中获取默认图标。屏幕截图:。