生成Qt资源文件
# 设置滤镜文件目录
set(FILTERS_DIR <资源文件所在目录>)# 设置生成的 QRC 文件的路径
set(QRC_FILTERS_FILE ${FILTERS_DIR}/<资源文件名称>.qrc)# 获取所有滤镜文件
file(GLOB_RECURSE FILTERS_FILES "${FILTERS_DIR}/*.*")# 生成 qrc 文件的内容
set(QRC_CONTENT "<RCC>\n <qresource prefix=\"/<资源前缀>\">\n")
foreach(FILE ${FILTERS_FILES})# 获取相对路径file(RELATIVE_PATH REL_PATH ${FILTERS_DIR} ${FILE})set(QRC_CONTENT "${QRC_CONTENT} <file>${REL_PATH}</file>\n")
endforeach()
set(QRC_CONTENT "${QRC_CONTENT} </qresource>\n</RCC>")# 将生成的 QRC 内容写入文件
file(WRITE ${QRC_FILTERS_FILE} "${QRC_CONTENT}")# 返回生成的 QRC 文件路径
set(GENERATED_QRC_FILE ${QRC_FILTERS_FILE} PARENT_SCOPE)
示例
# 设置滤镜文件目录
set(FILTERS_DIR ${CMAKE_SOURCE_DIR}/resource/skin)# 设置生成的 QRC 文件的路径
set(QRC_FILTERS_FILE ${FILTERS_DIR}/skin.qrc)# 获取所有滤镜文件
file(GLOB_RECURSE FILTERS_FILES "${FILTERS_DIR}/*.*")# 生成 qrc 文件的内容
set(QRC_CONTENT "<RCC>\n <qresource prefix=\"/skin\">\n")
foreach(FILE ${FILTERS_FILES})# 获取相对路径file(RELATIVE_PATH REL_PATH ${FILTERS_DIR} ${FILE})set(QRC_CONTENT "${QRC_CONTENT} <file>${REL_PATH}</file>\n")
endforeach()
set(QRC_CONTENT "${QRC_CONTENT} </qresource>\n</RCC>")# 将生成的 QRC 内容写入文件
file(WRITE ${QRC_FILTERS_FILE} "${QRC_CONTENT}")# 返回生成的 QRC 文件路径
set(GENERATED_QRC_FILE ${QRC_FILTERS_FILE} PARENT_SCOPE)
添加QT资源文件
qt5_add_resources(RESOURCE_FILES <资源文件路径>
)
# 可执行文件
add_executable(${E_DEMO} WIN32 ${MAIN_CPP} ${RESOURCE_FILES} )
示例
qt5_add_resources(RESOURCE_FILES ${CMAKE_SOURCE_DIR}/resource/Filters/filters.qrc${CMAKE_SOURCE_DIR}/resource/skin/skin.qrc
)# 可执行文件
add_executable(${E_DEMO} WIN32 ${MAIN_CPP} ${RESOURCE_FILES} )
使用资源文件
QImage aj_image = QImage(R"(:/skin/whiten.png)");
/skin
是因为我写了前缀是/skin
,然后资源文件时whiten.png
添加资源文件到静态库无效
当你的库是静态库时添加资源文件是无效的,要添加到调用静态库的动态库或者exe才可以,这样你的静态库也能共享该资源,也就是资源是和实质生成的可执行文件绑定的
❌ 不能把 .qrc
直接加到静态库
cmake
复制编辑
add_library(my_static_lib STATIC ${SRC_FILES} ${RESOURCE_FILES}) # ❌ 资源不会生效
⛔ 这样不行!因为静态库不会打包 .qrc
资源,必须把 .qrc
绑定到最终的 exe
或 dll