CMake添加使用qt资源文件

生成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 绑定到最终的 exedll

posted @ 2025-04-02 00:00  乘舟凉  阅读(296)  评论(0)    收藏  举报