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());
}
}
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
@drescherjm Ja, aber wie nehme ich diese anschließend richtig auf? 'childEvent (QChildEvent * event)' scheint nicht zu triggern – user8908459
Es scheint mir, dass der Elternteil nicht weiß, dass er Kinder hat, Sie müssen sie bekommen, wenn Sie sie brauchen. – eyllanesc