使用cmake(窗口)构建时不显示Qt资源
Qt resources not displaying when building with cmake (windows)
我有一个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
的替代方法,结果是一样的。
我还将所有iconengines
、imageformats
、platforms
、styles
文件夹与.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})
希望这有帮助
- 从数据库实时显示QT c++中的数据
- Qt自定义QPush按钮未显示在布局上
- 由于PC显示设置的更改,Qt小部件被部分剪裁
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- Qt 调试显示行号
- OpenCV QT,显示视频的帧(不使用while循环)
- 使用cmake(窗口)构建时不显示Qt资源
- 以编程方式在任何按钮上突出显示 Qt 鼠标悬停按钮
- 异步显示 Qt 对话框
- 无法从 void 函数内向 UI 显示 - QT
- 在与应用程序相同的窗口中显示Qt虚拟键盘
- 通过插槽打印/显示QT函数调用的内容
- 如何正确显示QT中的STD :: vector
- 显示未显示QT其他类的文本框
- 如何在运行时显示QT中的字符串列表
- 显示 QT 上下文菜单时没有键发布事件
- 当添加到现有应用程序时,QDialog或QMessageBox显示Qt::BusyCursor
- 在第三方窗口上显示QT小部件(在Windows中)
- 程序运行,但没有显示Qt c ++