You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建含资源的纯QML CMake库(Qt 6.2.x)

构建Qt 6 QML核心库(含资源)的CMake方案

针对你的需求,下面给出一套可直接落地的CMake配置方案,实现自定义QML组件、资源的封装,上层项目无需修改资源路径即可导入使用:

1. 目录结构调整建议

保持你现有框架的基础上,确保结构符合QML模块规范:

import/
└── MyFrontEndCoreLib/
    ├── UICoreComponents/
    │   ├── CMakeLists.txt  # 核心库配置文件
    │   ├── qmldir          # QML模块描述文件
    │   ├── MyButton.qml    # 自定义组件示例
    │   ├── MyTheme.qml     # 主题文件示例
    │   └── ...             # 其他QML组件
    └── Images/
        ├── icons/
        │   └── core_icon.svg
        └── themes/
            └── dark.qml

2. 核心库CMake配置(UICoreComponents/CMakeLists.txt)

使用Qt 6推荐的qt_add_qml_module指令完成打包,关键参数确保资源路径被内部封装:

cmake_minimum_required(VERSION 3.16)
project(MyFrontEndCoreLib VERSION 1.0 LANGUAGES CXX)

# 引入Qt 6 QML模块
find_package(Qt6 REQUIRED COMPONENTS Qml)

# 启用Qt自动工具链(MOC/RCC/UIC)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 构建QML模块
qt_add_qml_module(MyFrontEndCore
    # 模块URI,上层QML导入时用这个名字
    URI MyFrontEnd.Core
    # 模块版本
    VERSION 1.0
    # 可选:构建静态库则添加STATIC,默认是动态库(dll/dylib)
    # STATIC
    # 列出所有自定义QML组件文件
    QML_FILES
        MyButton.qml
        MyTheme.qml
        # 其他组件...
    # 打包所有资源文件(图标、主题等)
    RESOURCES
        ../Images/icons/core_icon.svg
        ../Images/themes/dark.qml
        # 其他资源...
    # 关键参数:禁止资源生成默认路径,确保上层无需修改资源引用
    NO_RESOURCE_TARGET_PATH
)

# 链接Qt依赖
target_link_libraries(MyFrontEndCore
    PRIVATE
        Qt6::Qml
)

# 安装配置(可选,用于让Qt Creator/Design Studio识别模块)
install(TARGETS MyFrontEndCore
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/qml/MyFrontEnd/Core
)
install(FILES qmldir
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/qml/MyFrontEnd/Core
)

3. QML模块描述文件(qmldir)

必须编写此文件,否则Qt工具链无法识别模块:

module MyFrontEnd.Core
version 1.0

# 映射组件文件名与版本
MyButton 1.0 MyButton.qml
MyTheme 1.0 MyTheme.qml

4. 上层项目引入方式

CMake配置(上层项目CMakeLists.txt)

cmake_minimum_required(VERSION 3.16)
project(MyApp VERSION 1.0 LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Qml Quick)
# 引入核心库,需确保CMAKE_PREFIX_PATH指向核心库的构建/安装目录
find_package(MyFrontEndCore REQUIRED)

qt_add_executable(MyApp main.cpp)

qt_add_qml_module(MyApp
    URI MyApp
    VERSION 1.0
    QML_FILES Main.qml
)

target_link_libraries(MyApp
    PRIVATE
        Qt6::Qml
        Qt6::Quick
        # 链接核心QML库
        MyFrontEndCore
)

# 静态库专属:确保QML模块被正确注册
if(MyFrontEndCore_STATIC)
    qt_import_qml_plugins(MyApp)
endif()

QML导入使用(Main.qml)

直接通过URI导入,资源路径无需修改:

import QtQuick 2.15
import QtQuick.Window 2.15
import MyFrontEnd.Core 1.0

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    MyButton {
        text: "自定义按钮"
        anchors.centerIn: parent
        // 直接引用库内资源,路径与库内结构一致
        icon.source: "qrc:/MyFrontEnd/Core/Images/icons/core_icon.svg"
    }
}

5. Qt Creator/Design Studio识别配置

  • 开发阶段:无需安装库,只需在Qt Creator的项目设置中,将核心库的构建目录添加到「QML导入路径」;
  • Design Studio:在Edit > Preferences > Qt Quick > QML Imports中添加核心库的构建/安装目录,即可在设计界面中使用自定义组件。

内容的提问来源于stack exchange,提问作者Messerdodo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:40:23