Es gibt Unterstützung für die implizite Konvertierung von einer Instanz in eine Komponente.
So folgt aus:
Loader {
sourceComponent: Item {
id: toLoad
}
}
ist einfach die implizite Version davon:
Loader {
sourceComponent: Component {
Item {
id: toLoad
}
}
}
Wenn Sie auf eine Eigenschaft binden, wird der Wert von der „Eltern“ Objekt gesammelt wird, aber es ist nicht dran dran. Der Artikel ist nicht eine Instanz, sondern eine Eigenschaft und Eigenschaften nicht parented:
property Item name: Item {
Component.onCompleted: console.log(name.parent) \\ null
}
Dies ändert sich, wenn die tatsächliche Komponente instanziert wird, und es ist sehr viel parented, wo es sein muss:
Row {
Loader {
sourceComponent: MouseArea {
id: toLoad
width: 200
height: 200
onClicked: {
console.log(parent) \\ QQuickLoader(0x2128768)
console.log(toLoad.parent) \\ QQuickLoader(0x2128768)
}
}
}
Loader {
sourceComponent: myComp
}
}
Component {
id: myComp
MouseArea {
width: 200
height: 200
onClicked: console.log(parent) // QQuickLoader(0x2128768)
}
}
Component.onCompleted: console.log(toLoad.parent) // ReferenceError: toLoad is not defined
Wie aus diesem Code hervorgeht, können Sie nicht einmal auf eine ID zugreifen, die sich in einer Komponente außerhalb dieser Komponente befindet. Also ich weiß nicht, wo Sie dieses Null Elternteil haben, es gibt keine solche ID auf der Außenseite, und auf der Innenseite wird das Objekt instanziiert und es wird definitiv ein Elternteil haben.
Beachten Sie auch, dass die Component
ist auch eine Art Sonderfall, da es nicht einmal die Eltern aussetzen, auch wenn es definitiv eine.
Es sollte beachtet und unterschieden werden, dass es in Qt Quick übergeordnete und visuelle Eltern gibt. Sie unterscheiden sich oft für ein Objekt. – Orient
* "Es gibt Unterstützung für die implizite Konvertierung von einer Instanz in eine Komponente." * Es gibt keine Instanz. Für jede Eigenschaft vom Typ 'Component' wird der Code in eine Komponente zerlegt. Wenn Sie die Instanz implizit in eine Komponente konvertieren würden, könnten Sie Folgendes schreiben: 'sourceComponent: Qt.createComponent (" SomeQML.qml "). CreateObject (...)', das mit "* fehlschlägt, QQuickItem kann nicht zugewiesen werden QQmlComponent * ". * "Ist einfach die implizite Version von diesem:" * ist richtig. – derM
* "Beachten Sie auch, dass die Komponente auch eine Art Sonderfall ist, da sie nicht einmal den Elternteil ausstellt, auch wenn er definitiv einen hat." * => Wie ein 'QtObject' hat eine Komponente keinen visuellen Elternteil. 'Component {parent: ...}' wird fehlschlagen. Es könnte einen Elternteil im Sinne des Qt-Elternteils haben, aber keinen visuellen Elternteil, und das sind alles, was in QML zählt. Der nicht-visuelle Elternteil wird niemals belichtet. – derM