我有一个很大的Qt +第三方库项目,我尝试编译成二进制文件,以便在另一台机器上测试程序。我能够进行二进制运行(找到所有必需的*.dll
和插件),但是,我无法弄清楚如何为我的程序添加带有图标的*.qrc
数据。目前,二进制文件无法加载任何图标,因此我只有带文本的按钮。
我的程序的代码结构如下:
CMakeLists.txt
main.cpp
CMakeLists.txt
Data.qrc
以及svg
格式的图标集.cpp
和.h
个文件 Data.qrc
文件的内容如下:
RCC>
<qresource prefix="/">
<file>file-name.svg</file>
...
这就是我在 program_folder 的CMakeLists.txt
内向我的程序添加资源的方法:
qt5_add_resources(IMG_RSC_ADDED data_folder/Data.qrc )
add_executable(${PROJECT_NAME} ${PROJECT_SRCS} ${IMG_RSC_ADDED} )
在 program_folder 的.cpp
个文件中,我加载了图标:
static QIcon icon(QPixmap(":/file-name.svg"));
对于图标,我有一个class Data{};
,在该类中我有一组方法,例如static const QIcon& fileIcon();
。在主代码中,当我需要使用图标时,我会这样称呼它:Data::fileIcon()
。
当我从源代码编译和运行时,它可以工作。
我准备了我的程序的二进制发行版,以及它在一些根文件夹中的结构:
qsvg.dll
qwindows.dll
my_program.exe
Qt5Core.dll
dll
s 我的问题是我如何以及在何处放置数据文件?我在创建的Data
文件夹中尝试了不同的位置,例如,在主文件夹内。我只是复制了我拥有的所有数据(svg
文件,qrc
文件),但二进制文件仍然无法查看资源。怎么解决?或者,通常的做法是什么?
注意,我使用CMake(而不是QMake)来编译我的二进制文件。我在Windows 7上使用Qt-5.4。如果我的问题缺乏细节,请告诉我,我会添加它们。谢谢!
答案 0 :(得分:1)
以下命令qt5_add_resources(IMG_RSC_ADDED data_folder/Data.qrc)
使得来自所提供的qrc文件(在本例中为Data.qrc)的每个资源生成具有二进制数据的源文件,并且所得文件的列表存储在IMG_RSC_ADDED
中变量。如果将此变量传递给add_executable
,则所有资源都嵌入到生成的二进制文件中。
接下来,针对实际问题:问题不在于分发,而在于代码本身。您在静态上下文中创建并初始化QIcon
并使用QPixmap
但QPixmap
需要QApplication
启动并运行,这与静态初始化上下文不同。所以正确的解决方法是将QIcon
的初始化移动到某个本地上下文(如类ctor或main函数)