QMetaProperty::read: 无法处理未注册的数据类型'TreeItem<InspectorItem>*'

2022-01-19 00:00:00 qt qml c++

Qt 不允许注册类模板?

Qt doesn't allow to register class template?

我的班级层次结构是

TreeItemTemplateBackend : public QObject

template<typename T>
TreeItem : public TreeItemTemplateBackend

这是我在qml中注册的:

This is what i registred in qml:

qmlRegisterType<InspectorItem>("ge.gui", 1, 0, "InspectorItem");
qmlRegisterType<TreeItemTemplateBackend>("ge.gui", 1, 0, "TreeItemTemplateBackend");
qmlRegisterType<TreeItem<InspectorItem>>("ge.gui", 1, 0, "TreeItem");

我仍然收到此错误:

QMetaProperty::read:无法处理属性Inspector::root"的未注册数据类型TreeItem*

Inspector::root 是:

Inspector::root is:

Q_PROPERTY(TreeItem<InspectorItem> * root READ root NOTIFY rootChanged)

推荐答案

当你想使用一个指向例如的指针时Q_PROPERTY 中的ClassA",您必须像这样注册它:

when you want to use a pointer to e.g. 'ClassA' in a Q_PROPERTY, you have to register it like this:

qRegisterMetaType<ClassA*>("ClassA*");

由于使用了模板,解决方案可能对您来说更复杂,但希望这会为您指明正确的方向.

The solution might be more complex for you due to the use of templates, but hopefully this points you in the right direction.

(与我的其他答案相同.来源:'jpn')

相关文章