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
在这种情况下已经足够了。
简介
我需要在我的应用 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
在这种情况下已经足够了。