从将 C++ 类型的属性暴露给与 QML一起使用的 QML 类必须是QObject
s。任何机会我可以使用非QObjects
s (又名 POCO,不是派生自QObject
,而是在 Qt 元系统中注册)?
如果没有,是否有一个简单的通用包装系统来使我的对象符合 QML。我能想到的一种方法是将动态属性添加到简单的QObject
.
或者有没有办法隐式转换为符合 QML 的类型,所以我根本不需要包装?
从将 C++ 类型的属性暴露给与 QML一起使用的 QML 类必须是QObject
s。任何机会我可以使用非QObjects
s (又名 POCO,不是派生自QObject
,而是在 Qt 元系统中注册)?
如果没有,是否有一个简单的通用包装系统来使我的对象符合 QML。我能想到的一种方法是将动态属性添加到简单的QObject
.
或者有没有办法隐式转换为符合 QML 的类型,所以我根本不需要包装?
这实际上是一个热门话题。
我相信您可以注册自己的 POD 并将它们传递给 ito 和 QML 端(就像黑盒子一样——没有任何成员访问权限,从未尝试过)。要访问成员,可以使用一些 get/set 包装器代码,或者以 QML 单例上的方法形式,或者在 QtObject 后代上有效地充当每个实例的包装器。
目前不支持动态属性——你可以用一些非常奇怪的技巧让它们工作,但这可能不值得(但如果你不想绑定到属性,事情会变得简单得多,而且它仍然是 QObjects)。
隐式转换意味着拥有某种预处理器(这可能是可行的,但会花费大量时间,并且需要将结果提交回 Qt(并终身支持它))。
我会这样:
问题是,自定义 POD 不享受与内置 do 相同级别的支持,并且标准语言实践是围绕操作垃圾收集的 QObject 实例(当然,通过指针到处传递)而构建的,这些实例已经关注-更改类型的属性: