2017-12-13 11 views
0

Ich versuche, die Kinder der Klasse QObject zu bekommen und ihre Daten zu den Eltern hinzuzufügen (siehe QML Beispiel unten). Wenn ich jedoch den folgenden Code im Konstruktor aufruft, gibt es keine untergeordneten Elemente zurück. Es scheint, dass die Child-Liste noch nicht ausgefüllt wurde. Es funktioniert, wenn ich den gleichen Code in die paint()-Funktion platziere, aber ich brauche die Daten früher.Wie kann ich die Kinder eines QObjects bekommen?

MultiGauge::MultiGauge() : 
    QQuickPaintedItem() 
{ 
    QObjectList children = this->children(); 

    for (int i = 0; i < children.length(); i++) 
    { 
     this->myQList.append(children[i]->metaObject()->className()); 
    } 
} 

Hier ist die QML

MultiGauge { 

    height: 125 
    width: height 
    Limits { 
     min: 0 
     caution: 1250 
     max: 2000 
    } 
    Limits { 
     min: 100 
     caution: 200 
     max: 300 
    } 
} 

EDIT-Datei: Lösung:

MultiGauge::componentComplete() 
{ 
    // must call the parent's version of the function first 
    QQuickPaintedItem::componentComplete(); 

    // now we can do what we need to 
    QObjectList children = this->children(); 

    for (int i = 0; i < children.length(); i++) 
    { 
     this->myQList.append(children[i]->metaObject()->className()); 
    } 
} 
+1

Ich glaube, es sollte keine Kinder sein, wenn der Konstruktor für die Eltern aufgerufen wird. Die Kinder sollten hinzugefügt werden, nachdem das Elternteil erstellt wurde. – drescherjm

+0

@drescherjm Ja, aber wie nehme ich diese anschließend richtig auf? 'childEvent (QChildEvent * event)' scheint nicht zu triggern – user8908459

+0

Es scheint mir, dass der Elternteil nicht weiß, dass er Kinder hat, Sie müssen sie bekommen, wenn Sie sie brauchen. – eyllanesc

Antwort

1

Sie sollten die Iteration verzögern, bis der QML Objektbaum abgeschlossen ist. Sie können das mit

MultiGauge { 
    // ... 
    Component.onCompleted: doSomeStuff() 
} 
Verwandte Themen