QML单例对象调用失败:Unable to assign [undefined] to QColor错误求助
问题解决:QML单例属性访问返回undefined导致类型错误
问题核心
在Qt 6.7.3的QML项目中,声明了带pragma Singleton的全局配置对象,但运行时访问其属性时触发Unable to assign [undefined] to QColor错误,属性无法正常读取。
根本原因
- 未导入自定义QML模块:Main.qml中没有导入包含单例对象的
QmlObjTypes模块,运行时引擎无法定位单例实例。 - 未在CMake中标记单例文件:仅在QML文件中加
pragma Singleton不够,需要在模块配置中明确告知Qt该文件是单例类型,否则引擎不会正确初始化单例。
解决方案
步骤1:修改Main.qml,添加模块导入
在现有导入语句后加入自定义模块的导入:
import QtQuick import QmlObjTypes 1.0 // 新增:导入自定义模块 Window { width: 640 height: 480 visible: true title: qsTr("Hello World") Rectangle { anchors.fill: parent color: TestQmlObj.primaryColor Text { text: qsTr("text") font: TestQmlObj.headerFont } } }
步骤2:修改CMakeLists.txt,标记单例文件
将TestQmlObj.qml从QML_FILES移到QML_SINGLETON_FILES下,明确声明其为单例:
qt_add_qml_module(appQmlObjTypes URI QmlObjTypes VERSION 1.0 QML_FILES Main.qml QML_SINGLETON_FILES // 新增单例文件配置 TestQmlObj.qml )
验证效果
重新构建并运行项目,此时单例对象会被正确初始化,TestQmlObj.primaryColor和headerFont能正常赋值给对应的QML属性,颜色和字体效果会正确显示。
内容的提问来源于stack exchange,提问作者user1771706
相关产品推荐
相关产品推荐

