インスタンスからコンポーネントへの暗黙的な変換がサポートされています。
ので、この:
Loader {
sourceComponent: Item {
id: toLoad
}
}
は、単純に、この暗黙のバージョンです:あなたはプロパティにバインドすると
Loader {
sourceComponent: Component {
Item {
id: toLoad
}
}
}
、値が「親」オブジェクトによって収集され、それがあるさその親ではない。アイテムは、インスタンスではなく、プロパティ、およびプロパティが親されない:
property Item name: Item {
Component.onCompleted: console.log(name.parent) \\ null
}
これは実際のコンポーネントがインスタンス化されるときに変化し、それがする必要がある場合、それは非常に親れる:
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
そのコードから明らかなように、そのコンポーネントの外側からコンポーネント内のIDにアクセスすることさえできません。だから私はあなたがそのヌルの親を持っているか分からず、外側にそのようなIDはなく、内部ではオブジェクトがインスタンス化され、間違いなく親を持つでしょう。
また、Component
も親を公開していないので、まったく特別なケースもあります。
Qt Quickに親と視覚の親があることに注意してください。それらはしばしば物体のために異なる。 – Orient
* "インスタンスからコンポーネントへの暗黙的な変換がサポートされています。" *インスタンスはありません。 'Component'型の各プロパティに対して、コードを解析してコンポーネントにします。インスタンスをコンポーネントに暗黙的に変換する場合、 'sourceComponent:Qt.createComponent(" SomeQML.qml ")。createObject(...)'で失敗する* QQuickItemを割り当てることができません。 QQmlComponent * "を返します。 * "これは単に暗黙のバージョンです:" *は正しいです。 – derM
* "Componentは特別なケースでもあることにも注意してください。親を公開していなくても、それは間違いなくあります。" * => 'QtObject'と同様に、Componentには視覚的な親はありません。 'Component {parent:...}'は失敗します。それはQt親という意味では親を持つかもしれませんが、視覚的な親を持たないかもしれません、そしてそれらはQMLで数えられるすべてです。非視覚の親は決して公開されない。 – derM