Qt - 在使用 Visual Studio 构建的 exe 中总是丢失资源
Qt - Resources are always lost in exe built with Visual Studio
我正尝试在 Visual Studio 2019 年使用 Qt 开发一个演示应用程序。我在 Visual Studio IDE 中使用了 Qt VS 工具,并且Qt 设计器来创建我的用户界面。我还使用了 Qt SVG 模块,以便在我的用户界面中使用 SVG 图像。
我实现了一个工作项目,它在调试和发布模式下工作得很好,只要我 运行 它来自 Visual Studio IDE。现在我想将它作为一个独立的 .exe 文件分发。为此,我尝试创建一个压缩存档,其中包含 .exe 本身、required Qt DLL,当然还有接口 requires.
的资源
编译后的 .exe 可以在其自己的目录中毫无问题地执行,但是 none 我在资源中添加的图像是可见的。我尝试了几种方法来解决这个问题,并阅读了许多解释如何使用 and/or 在 exe 文件中嵌入 Qt 资源的教程。 None 其中对我有用。
我已经尝试过:
- 简单地复制 .exe 目录中的图像,保留或不保留它们的目录层次结构,但只有 .png 和 .jpg 图像可见,所有 SVG 都丢失了。
- 使用Qtrcc.exe工具编译一个Qt资源文件(.rcc),添加到Visual Studio资源中,没成功。
- 使用 "Create basic .pro file..." 菜单项生成一个 .pro 文件(也生成一个 .pri 文件)并添加以下行,但没有成功:
RESOURCES += MyResName.qrc
- 在源代码的不同位置添加以下行(主窗体构造函数、main() 函数等)。没有任何效果:
QResource::registerResource("MyResName.rcc");
...
Q_INIT_RESOURCE(MyResName)
- 玩弄和混合上述想法,没有任何效果。
所以有人能给我一个尽可能简单的解释,说明如何正确地 build 一个 .exe 文件及其 required 资源,它可能以独立的方式工作,使用 Qt 和 Visual Studio 2019,为了分发它,遵守以下限制:
- 该项目是用Qt和Visual Studio2019开发的C++项目。
- 该项目使用 Qt,有一个 .ui 文件 built with Qt Designer,其中嵌入了几个 SVG and/or PNG/JPG 图像,其中这些图像在设计时可见,如果 exe 是 IDE.
中的 运行
- 该项目使用指向图像的 .qrc 文件,SVG 与否,应用程序需要 uired。
- 图像是通过样式表 属性 添加到 UI 组件的,像这样:
image: url(resources/images/im-dropbox.svg) center center;
- 其他资源文件,如 .pro、.pri、.rcc... 可能会毫无问题地生成。 required 资源很好地嵌入到生成的文件中(已验证)。
请帮助我,因为这种情况让我很头疼。
我将尝试按照我看到的顺序涵盖我看到的所有问题。
首先你不使用资源中的文件,Qt 资源文件路径以 :/
开头,例如从资源中设置图标(在 C++ 代码中)你将这样做:
a.setWindowIcon(QIcon(":/images/window_title_ico.png"));
现在,要直接从 Qt Designer 使用资源,您需要为每个 ui
文件添加 .qrc
文件(单击该 "edit" 图标,然后 "Open resource file") 之后你可以从资源中设置图标,看打印屏幕(Qt 设计器从 VS 开始)
注意:您可以仔细检查生成的 .ui 文件(它是一个 xml 文件)以查看图标路径是否以 :/
开头,那么您就知道您已经完成了正确的。 //在 .ui
文件中,您会看到如下内容:
<pixmap resource="resources/resources.qrc">:/images/acceleration.svg</pixmap>
//注意.qrc文件的相对路径,.svg
文件路径以:/
开头
最后,为了在部署时显示 .svg
,我注意到您也需要部署 Qt5Svg.dll
(来自:PATH_2_QT.XX.X\msvcXXX_XX\bin
),仅部署 imageformats\qsvg.dll
还不够。
希望这有助于澄清一些事情!
我正尝试在 Visual Studio 2019 年使用 Qt 开发一个演示应用程序。我在 Visual Studio IDE 中使用了 Qt VS 工具,并且Qt 设计器来创建我的用户界面。我还使用了 Qt SVG 模块,以便在我的用户界面中使用 SVG 图像。
我实现了一个工作项目,它在调试和发布模式下工作得很好,只要我 运行 它来自 Visual Studio IDE。现在我想将它作为一个独立的 .exe 文件分发。为此,我尝试创建一个压缩存档,其中包含 .exe 本身、required Qt DLL,当然还有接口 requires.
的资源编译后的 .exe 可以在其自己的目录中毫无问题地执行,但是 none 我在资源中添加的图像是可见的。我尝试了几种方法来解决这个问题,并阅读了许多解释如何使用 and/or 在 exe 文件中嵌入 Qt 资源的教程。 None 其中对我有用。
我已经尝试过:
- 简单地复制 .exe 目录中的图像,保留或不保留它们的目录层次结构,但只有 .png 和 .jpg 图像可见,所有 SVG 都丢失了。
- 使用Qtrcc.exe工具编译一个Qt资源文件(.rcc),添加到Visual Studio资源中,没成功。
- 使用 "Create basic .pro file..." 菜单项生成一个 .pro 文件(也生成一个 .pri 文件)并添加以下行,但没有成功:
RESOURCES += MyResName.qrc
- 在源代码的不同位置添加以下行(主窗体构造函数、main() 函数等)。没有任何效果:
QResource::registerResource("MyResName.rcc");
...
Q_INIT_RESOURCE(MyResName)
- 玩弄和混合上述想法,没有任何效果。
所以有人能给我一个尽可能简单的解释,说明如何正确地 build 一个 .exe 文件及其 required 资源,它可能以独立的方式工作,使用 Qt 和 Visual Studio 2019,为了分发它,遵守以下限制:
- 该项目是用Qt和Visual Studio2019开发的C++项目。
- 该项目使用 Qt,有一个 .ui 文件 built with Qt Designer,其中嵌入了几个 SVG and/or PNG/JPG 图像,其中这些图像在设计时可见,如果 exe 是 IDE. 中的 运行
- 该项目使用指向图像的 .qrc 文件,SVG 与否,应用程序需要 uired。
- 图像是通过样式表 属性 添加到 UI 组件的,像这样:
image: url(resources/images/im-dropbox.svg) center center;
- 其他资源文件,如 .pro、.pri、.rcc... 可能会毫无问题地生成。 required 资源很好地嵌入到生成的文件中(已验证)。
请帮助我,因为这种情况让我很头疼。
我将尝试按照我看到的顺序涵盖我看到的所有问题。
首先你不使用资源中的文件,Qt 资源文件路径以 :/
开头,例如从资源中设置图标(在 C++ 代码中)你将这样做:
a.setWindowIcon(QIcon(":/images/window_title_ico.png"));
现在,要直接从 Qt Designer 使用资源,您需要为每个 ui
文件添加 .qrc
文件(单击该 "edit" 图标,然后 "Open resource file") 之后你可以从资源中设置图标,看打印屏幕(Qt 设计器从 VS 开始)
注意:您可以仔细检查生成的 .ui 文件(它是一个 xml 文件)以查看图标路径是否以 :/
开头,那么您就知道您已经完成了正确的。 //在 .ui
文件中,您会看到如下内容:
<pixmap resource="resources/resources.qrc">:/images/acceleration.svg</pixmap>
//注意.qrc文件的相对路径,.svg
文件路径以:/
最后,为了在部署时显示 .svg
,我注意到您也需要部署 Qt5Svg.dll
(来自:PATH_2_QT.XX.X\msvcXXX_XX\bin
),仅部署 imageformats\qsvg.dll
还不够。
希望这有助于澄清一些事情!