2016-08-16 25 views
5

ise irakam QObject tescilli QML Tip

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

aracılığıyla QmlComponents olarak Tiplerinin birçok kayıt am dışarı Şimdi SADECE QML kayıtlı türlerini elde ederken nesne ağaç travers istiyoruz.

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); 
    } 
} 

Bana yardım eden var mı? Ben (tiplerini kendileri değiştirmeden) düşünebiliriz

cevap

1

yakın şey qmlEngine() kullanmak olacaktır: Ancak

if (qmlEngine(root)) { 
    return; 
} 

, QML oluşturulan herhangi türleri için de geçerlidir dönecek. Bunu eğer sadece tutmak için bir neden emin değilim,

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

karşın, yine de:

sadece C++ türlerini tespit etmek için, onların tip Adını önek (örneğin QmlService) verebilir Bir listeye veya bir şeye kaydettiğiniz türlerin izini takip edin ve daha sonra buna başvurun. Elde etmeye çalıştığınız şey hakkında biraz bilgi verirseniz, belki daha iyi çözümler bulabiliriz.