QT Framework 和 Visual Studio - 图标冲突

QT Framewrok and Visual Studio - icon conflict

简介

我需要在我的应用 window 和任务栏 (Windows 10) 的左上角为 .exe 文件设置一个图标。然而,它只能部分工作——我可以设置 .exe 图标,但仅此而已。在其他两个地方我有默认图标。我在 Visual Studio 2017.

中使用 QT 5.9.7

到目前为止我测试了什么

我的 .rc 文件中有以下行:

IDI_ICON1               ICON                    "favicon.ico"

这让我有 .exe 图标。但它似乎不影响框架的其余部分。我试图以这种方式设置应用内图标 (main.cpp):

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowIcon(QIcon(":/favicon.ico"));
    // a.setWindowIcon also doesn't work.
    return a.exec();
}

甚至在mainwindow.cpp

里面
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowIcon(QIcon(":/favicon.ico"));
}

然而它似乎被忽略了——它没有任何效果,也没有给我任何错误。我还尝试在 THIS 指令之后包含 imageformats/qico.dll - 仍然没有成功。

问题

那么 - 如何正确设置这两个其他图标 - 在 Windows 任务栏上,以及在我的应用程序的角落 window?

编辑: 添加 qrc 文件也无法解决问题。

如果您不使用 Creator / qmake,则需要按照 Qt 文档中的步骤操作:

If you do not use qmake, the necessary steps are: first, create an .rc file and run the rc or windres program on the .rc file, then link your application with the resulting .res file.

这将为 Windows 资源管理器/任务栏创建图标。

左上角的图标是在qrc文件中加入资源编译器编译生成的。此图标需要通过调用 app.setWindowIcon(QIcon(":/favicon.ico")); 来设置,其中 app 是您的 QApplication 实例。

我找到了解决方法,所以我会post这里,以防其他人遇到同样的问题:

首先-这件事与.rc.qrc文件无关,图标甚至可以直接从app目录加载。问题出在支持的格式中——出于某种原因,在 Windows 10 下,QT 框架中的 .ico 格式存在问题。理论上添加 imageformats/qico.dll 应该可以解决问题,但事实并非如此。解决方案是使用其他格式(在我的例子中是 .png),并将其直接放在 .exe 文件所在的位置,而不是在任何子目录中。然后你可以这样称呼它:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    a.setWindowIcon(QIcon("favicon.png"));
    return a.exec();
} 

或者,如果你想将图标编译成二进制形式,你可以尝试将其添加到资源中,但是格式仍然不能是 .ico 才能使其工作,因为这是来源的问题。图标的大小调整正确,所以它在应用程序的角落 window 和任务栏上看起来都不错 - 因此 .png 在这种情况下已经足够了。