2016-08-16 7 views
5

であれば、私は図QObjectを登録済みのQMLタイプ

qmlRegisterType<Service>("my.services", 1, 0, "Service"); 

経由QmlComponentsとしての種類の多くを登録していますから今私はONLY 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); 
    } 
} 

誰でも私を助けることができますか?

答えて

1

私は(種類そのものを変更せずに)を考えることができる最も近いものはqmlEngine()を使用することです:

if (qmlEngine(root)) { 
    return; 
} 

しかし、QMLで作成した任意のタイプのためにtrueを返しますこと。あなたは自分のタイプ名に接頭辞(例えばQmlService)を与えることができる、ちょうどあなたのC++の型を検出するため

if (QString(root->metaObject()->className()).contains("Qml")) { 
    return; 
} 

あなたがこれを行うことができれば、私はあなただけでは保管しないだろう、なぜわからないけどどのタイプのリストをリストに登録し、後でそれを参照するかを追跡します。あなたが達成しようとしていることについて少し詳しく説明したら、おそらくもっと良い解決策を見つけることができます。

関連する問題