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

使用CMake构建C++ QML模块:CustomObjectLib无法导入求助

问题根源与解决步骤

1. 修正QML导入语句

你在QML中导入的是CMake目标名称CustomObjectLib,但QML模块的识别依据是URI而非CMake目标名。你的自定义模块URI是CustomObject,因此需要修改Main.qml的导入语句:

import QtQuick
import QtQuick.Window
// 替换原导入语句为URI+版本
import CustomObject 1.0

Window {
    // ... 其余代码不变
}

2. 将自定义模块链接到主程序

主可执行文件需要链接自定义QML模块,否则运行时无法加载模块实现。修改CMakeLists.txt中的target_link_libraries部分,添加CustomObjectLib依赖:

target_link_libraries(appQMLObjectInCPP
    PRIVATE Qt6::Quick CustomObjectLib
)

3. (可选)确保自定义模块源文件完整

检查customobject.cpp是否存在,内容至少包含头文件引用(否则CMake会因找不到源文件报错):

#include "customobject.h"

完整修正后的代码示例

修正后的Main.qml

import QtQuick
import QtQuick.Window
import CustomObject 1.0

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

    CustomObject {
        id: customObject
    }

    Button {
        id: button
        anchors.centerIn: parent
        text: qsTr("Click Me!")
        onClicked: {
            customObject.setObject(button)
        }
    }
}

修正后的CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(QMLObjectInCPP VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 6.4 REQUIRED COMPONENTS Quick)

qt_standard_project_setup()

qt_add_executable(appQMLObjectInCPP
    main.cpp
)

qt_add_qml_module(appQMLObjectInCPP
    URI QMLObjectInCPP
    VERSION 1.0
    QML_FILES Main.qml
)

# 自定义QML模块配置
qt_add_qml_module(CustomObjectLib
    URI CustomObject
    VERSION 1.0
    SOURCES customobject.h customobject.cpp
)

set_target_properties(appQMLObjectInCPP PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

# 链接主程序与自定义模块
target_link_libraries(appQMLObjectInCPP
    PRIVATE Qt6::Quick CustomObjectLib
)

install(TARGETS appQMLObjectInCPP
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

# 可选:部署自定义模块
install(TARGETS CustomObjectLib
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

最后操作

清理项目构建目录,重新执行CMake配置并构建,问题即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:54:57