如何使 setWindowIcon 在独立的可执行文件(Qt5.14 + VS2019)中正常工作?

Posted

技术标签:

【中文标题】如何使 setWindowIcon 在独立的可执行文件(Qt5.14 + VS2019)中正常工作?【英文标题】:How to make setWindowIcon work properly in a stand-alone executable (Qt5.14 + VS2019)? 【发布时间】:2020-07-11 11:31:54 【问题描述】:

我正在 MS Visual Studio Community 2019 中编写 Qt 应用程序。我正在尝试使用以下命令向我的应用程序窗口添加一个图标,并且我还提到了相应的文件 my_icon.ico.qrc 文件中:

setWindowIcon(QIcon(":/my_icon.ico"));

当我在 VS 中构建和运行我的程序时,一切都很完美——图标取代了标准图标。但是,当我发布并尝试运行生成的独立可执行文件时,图标未显示!这特别奇怪,因为我在 .qrc 文件中也提到过的图片(按钮图片)都在它们的位置上。

我尝试将 my_icon.ico 放在 .exe 文件旁边,但没有结果。

我放弃了,请告诉我这里可能发生的事情。

【问题讨论】:

你如何部署你的应用程序?请使用windeployqt - 然后将ico图像格式的插件正确复制到正确的位置并且可以加载图像。 事实证明我在这方面还很陌生,因为之前我只编写了相当简单的控制台软件。我现在要做的只是在 Visual Stidio 中构建一个发布版本,然后我转到 Release 目录并将 .exe 文件复制到一个新文件夹中。当然,我通过从 Qt 文件夹中复制和粘贴手动给它的 Qt 库的缺失让它很恼火。 你能澄清一下windeployqt应该在哪里进入这个管道吗?就我从本文档 (doc.qt.io/qt-5/windows-deployment.html) 中获得的信息而言,我应该将整个 Qt 配置为静态(因为我的梦想是将所有库都包含在我的 .exe 中),然后将 Release 文件夹提供给 windeployqt 程序。我是对的还是我错过了一些重要的事情? 您目前如何部署您的应用程序?只需复制可执行文件+ dll?不要这样做,而是按照文档中的说明使用 windeployqt。在这个知识的早期阶段,我不会使用静态链接。特别是。因为它不会给你太多 - 创建一个合适的安装程序是更好的方法。 【参考方案1】:

感谢chehrlic,我明白这就像在Visual Studio 的Release 配置构建的.exe 文件上运行windeployqt.exe 一样简单。

这将动态链接所有需要的库。

.exe 文件位于 Release 文件夹中时避免使用此工具,因为它会在 .exe 文件附近创建许多其他文件和文件夹。我已将 my_app.exe 复制到一个新目录并从中运行以下命令:

C:\Qt\5.14.1\msvc2017_64\bin\windeployqt.exe my_app.exe --release

更多详情请见https://doc.qt.io/qt-5/windows-deployment.html。

【讨论】:

以上是关于如何使 setWindowIcon 在独立的可执行文件(Qt5.14 + VS2019)中正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何使您的可执行文件可信

SBCL:构建一个独立的可执行文件

将MATLAB程序发布为独立的可执行的程序包.exe

如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件

QT 设置应用程序图标和可执行程序图标(另有setWindowTitle和setWindowIcon)

从 python 代码为 Windows 创建独立的可执行文件