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

QML单例对象调用失败:Unable to assign [undefined] to QColor错误求助

问题解决:QML单例属性访问返回undefined导致类型错误

问题核心

在Qt 6.7.3的QML项目中,声明了带pragma Singleton的全局配置对象,但运行时访问其属性时触发Unable to assign [undefined] to QColor错误,属性无法正常读取。

根本原因

  1. 未导入自定义QML模块:Main.qml中没有导入包含单例对象的QmlObjTypes模块,运行时引擎无法定位单例实例。
  2. 未在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:50:19