Pertanyaan mencari tahu apakah QObject adalah QML Type terdaftar


Saya mendaftarkan banyak Jenis sebagai QmlComponents melalui

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

Sekarang saya ingin melintasi pohon objek sambil mendapatkan jenis yang terdaftar qml HANYA.

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

Dapatkan seseorang menolong saya dengan itu ?


5
2017-08-16 10:03


asal


Jawaban:


Hal terdekat yang dapat saya pikirkan (tanpa mengubah jenisnya sendiri) akan digunakan qmlEngine():

if (qmlEngine(root)) {
    return;
}

Namun, itu akan mengembalikan true untuk jenis apa pun yang dibuat di QML.

Untuk hanya mendeteksi tipe C ++ Anda, Anda bisa memberikan nama mereka sebagai awalan (mis. QmlService):

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

Meskipun jika Anda dapat melakukan ini, saya tidak yakin mengapa Anda tidak hanya melacak jenis apa yang Anda daftarkan dalam daftar atau sesuatu dan merujuknya nanti. Jika Anda menjelaskan sedikit tentang apa yang ingin Anda capai, mungkin kita bisa menemukan solusi yang lebih baik.


1
2017-08-16 15:20