gpt4 book ai didi

c++ - 如何将 qrc 数据包含到使用 CMake 编译的基于 Qt 的二进制文件中

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:45 31 4
gpt4 key购买 nike

我有一个很大的 Qt + 第三方库项目,我试图将其编译成二进制文件,以便在另一台机器上测试该程序。我能够运行二进制文件(找到所有必要的 *.dll 和插件),但是,我不知道如何包含 *.qrc 数据我的程序的图标。目前,二进制文件无法加载任何图标,所以我只有带有文本的按钮。

我的程序代码结构如下:

  • 根文件夹
    • CMakeLists.txt
    • 程序文件夹
      • main.cpp
      • CMakeLists.txt
      • data_folder/Data.qrcsvg 格式的图标集
      • 其他.cpp.h文件
    • lib_folder1
    • lib_folder2
    • ...

这是 Data.qrc 文件的内部结构:

RCC>
<qresource prefix="/">
<file>file-name.svg</file>
...

这就是我将资源添加到我的程序的方式,在 program_folderCMakeLists.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
  • 其他 Qt 和 3rd-party-lib dll

我的问题是如何以及在哪里放置数据文件?我尝试了不同的位置,例如,在主文件夹内,在创建的 Data 文件夹内。我只是简单地复制了我所有的数据(svg 文件,qrc 文件),但是二进制文件仍然看不到资源。如何解决?或者,常见的做法是什么?

请注意,我正在使用 CMake(而非 QMake)来编译我的二进制文件。我在 Windows 7 上使用 Qt-5.4。如果我的问题缺少详细信息,请告诉我,我会添加它们。谢谢!

最佳答案

以下命令qt5_add_resources(IMG_RSC_ADDED data_folder/Data.qrc) 使从提供的 qrc 文件(在本例中为 Data.qrc)和列表的每个资源生成带有二进制数据的源文件结果文件存储在 IMG_RSC_ADDED 变量中。如果将此变量传递给 add_executable,所有资源都会嵌入生成的二进制文件中。

接下来,针对实际问题:问题不在于分发,而在于代码本身。您在静态上下文中创建和初始化 QIcon 并为其使用 QPixmapQPixmap 需要 QApplication 启动并运行静态初始化上下文不是这种情况。因此,正确的解决方法是将 QIcon 的初始化移动到某些本地上下文(如类构造函数或主函数)

关于c++ - 如何将 qrc 数据包含到使用 CMake 编译的基于 Qt 的二进制文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229819/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com