【问题标题】:QT Framewrok and Visual Studio - icon conflictQT Framework 和 Visual Studio - 图标冲突
【发布时间】:2020-05-12 02:52:46
【问题描述】:

简介

我需要为 .exe 文件、我的应用程序窗口的左上角和任务栏 (Windows 10) 设置一个图标。但是它只能部分工作-我可以设置 .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 任务栏和我的应用程序窗口的角落?

编辑: 添加qrc文件也不能解决问题。

【问题讨论】:

  • 一个快速的谷歌出现了doc.qt.io/qt-5/appicon.html
  • 嗨@AlanBirtles,再看看我的问题。我已经这样做了,它只设置了 .exe 文件的图标。所以不是解决方案。
  • 您的图标需要位于qrc 文件中才能使用:/favicon.ico 文件名:doc.qt.io/qt-5/resources.html 加载
  • 再一次 - 我不使用 QT Creator,我使用 Visual Studio。我尝试将其添加到qrc 进行测试,但没有任何改变。我认为 Visuals Studio 根本不使用 qrc 文件。
  • 我不认为使用Visual Studio 是相关的,QT 仍然只从它自己的资源系统而不是从Windows 可执行资源加载资源

标签: c++ visual-studio qt icons


【解决方案1】:

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

如果不使用qmake,必要的步骤是:首先,创建一个.rc 文件并在 .rc 文件上运行 rc 或 windres 程序,然后链接您的 使用生成的 .res 文件的应用程序。

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

左上角的图标是通过将其添加到 qrc 文件并使用资源编译器进行编译来创建的。此图标需要通过调用app.setWindowIcon(QIcon(":/favicon.ico")); 来设置,其中 app 是您的 QApplication 实例。

【讨论】:

  • 感谢您的回答,但解决方案有点不同。有关更多详细信息,请查看我的“自我回答”。
【解决方案2】:

我找到了解决办法,所以我把它贴在这里,以防其他人遇到同样的问题:

首先-这件事与.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 才能使其工作,因为这是问题的根源。图标的大小已正确调整,因此无论是在应用程序窗口的角落还是在任务栏上都看起来不错 - 因此在这种情况下.png 就足够了。

【讨论】:

  • 这是正确的,但是对我来说,在 WIN 10 和 QT 5.15.2 下使用 .ico 可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2021-04-18
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多