使用cmake(窗口)构建时不显示Qt资源

Qt resources not displaying when building with cmake (windows)

本文关键字:显示 Qt 资源 构建 cmake 窗口 使用      更新时间:2023-10-16

我有一个Visual Studio Qt解决方案,我正在迁移到Cmake。 一切都在编译和工作正常,除了我在 *.qrc 文件中的所有图标 (.png( 根本没有显示。 我的CMakeLists.txt是Qt项目的标准:

...
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(SOURCE_FILES ...)
set(HEADER_FILES ...)
set(UI_FILES ...)
set(RESOURCE_FILES resources/res.qrc)
add_executable(project WIN32 ${SOURCE_FILES} ${HEADER_FILES} ${UI_FILES} ${RESOURCE_FILES})
find_package(Qt5 REQUIRED COMPONENTS ...)
target_link_libraries(project PRIVATE Qt5::Core etc...)

我认为所有图标实际上都嵌入到.exe中,因为:
1.如果我从qrc文件中删除所有路径并重新编译,则.exe大小会减小图标大小
2。我检查了AUTORCC生成的qrc_*.cpp,所有图像都在那里。

但是当我使用此代码片段遍历我的所有资源时

QDirIterator it(":", QDirIterator::Subdirectories);
while (it.hasNext()) {
qDebug() << it.next();
}

图标不存在。

我尝试了一种qt5_add_resources()而不是AUTORCC的替代方法,结果是一样的。
我还将所有iconenginesimageformatsplatformsstyles文件夹与.exe放在同一路径上。

编辑:

将项目的整个Cmake部分添加到 github。

考虑到我们在您的帖子评论中的讨论,CMake按预期工作,并且资源已加载到您的应用程序中。

正如您提到的"当我从 clion 运行我的应用程序时,它会显示图像。如果我将 exe 复制到带有 *.dll 等的文件夹中,它不会。

  • 复制时缺少某些文件,应尝试使用windeployqt正确复制运行时所需的文件

  • 或者问题来自 qrc 的加载方式,那么,我建议你调试 qrc_*.cpp 文件的内容(你可以在将它复制到 clion 之外后调试它(,看看为什么它无法加载资源

无论如何,这看起来更像是部署问题,而不是配置/编译问题。

在类似情况下,我的诀窍是在 CMake 中添加一行,如下所示:

QT6_ADD_RESOURCES(PROJECT_RESOURCES ${RESOURCE_FILES})

因此,您不是直接将 ${RESOURCE_FILES} 插入add_executable,而是先插入QT6_ADD_RESOURCES,然后将PROJECTS_RESOURCES变量放入add_executable。 因此,您应该在 VS 源文件中看到qrc_res.cpp文件。 完整的代码片段:

set(RESOURCE_FILES resources/res.qrc)
QT6_ADD_RESOURCES(PROJECT_RESOURCES ${RESOURCE_FILES})
add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES} ${UI_FILES} ${PROJECT_RESOURCES})

希望这有帮助