使用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
相关产品推荐
相关产品推荐

