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

QML嵌套QObject运行报错:无法处理未注册的Projector类型

解决QML嵌套QObject运行时类型注册错误

问题根源

错误QMetaProperty::read: Unable to handle unregistered datatype 'Projector' for property 'Backend::projector'的核心原因有两个:

  1. 自定义Projector类未注册到QML元类型系统,导致QML无法识别该类型
  2. Backend类中Q_PROPERTY的类型声明与getter返回类型不匹配

具体修复步骤

1. 修正Backend类的属性声明

打开backend.h,将Q_PROPERTY的类型改为指针类型(与getProjector的返回值一致):

Q_PROPERTY(Projector* projector READ getProjector NOTIFY projectorChanged)

2. 注册Projector类型到QML元系统

打开main.cpp,在注册Backend的代码后,添加Projector的注册代码:

qmlRegisterType<Backend>("com.company.backend", 1, 0, "Backend");
// 新增以下一行,注册Projector类型
qmlRegisterType<Projector>("com.company.backend", 1, 0, "Projector");

3. 验证moc文件生成(可选)

确保项目已经运行过qmake,生成了Projector和Backend对应的moc文件。如果使用Qt Creator,可通过Build -> Run qmake手动触发。

修复后的代码说明

  • 注册Projector类型后,QML就能识别该自定义对象类型,允许通过backend.projector访问其属性(如list)
  • 修正Q_PROPERTY的类型后,元对象系统能正确读取指针类型的属性值,避免类型不匹配导致的读取错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:09:30