我通过
将许多类型注册为QmlComponentsqmlRegisterType<Service>("my.services", 1, 0, "Service");
现在我想在获取qml注册类型的同时遍历对象树。
void Service::traverse(QString &path, QObject *root) {
if( <!root is registered qml type> ) { //<-- this piece im missing
return;
}
if(!path.isEmpty()) {
path.append('.');
};
path.append(root->metaObject()->className());
qDebug() << path;
foreach(QObject *o, root->children()) {
traverse(path, o);
}
}
任何人都可以帮助我吗?
答案 0 :(得分:2)
我能想到的最接近的事情(不改变类型本身)就是使用qmlEngine()
:
if (qmlEngine(root)) {
return;
}
但是,对于在QML中创建的任何类型,它都将返回true。
要仅检测您的C ++类型,您可以为其类型名称指定前缀(例如QmlService
):
if (QString(root->metaObject()->className()).contains("Qml")) {
return;
}
虽然如果你能做到这一点,我不确定你为什么不跟踪你在列表或其他东西中注册的类型,并在以后引用它。如果你详细说明你想要实现的目标,也许我们可以提出更好的解决方案。