2017-09-15 8 views
1

私はこれを実行します。私は明示的に親を設定しない限り、ローダーのsourceComponentの親のセマンティクスは何ですか?

Loader { 
    sourceComponent: Item { 
     id: toLoad 
    } 
} 

toLoadは親nullを持っています。

しかし、私はこれを行うとき:

Component { 
    id: myComp 
    Item { 
    } 
} 

Loader { 
    sourceComponent: myComp 
} 

をその後、ローダによってインスタンス項目は、ローダの親と同じ親を持っています。

これは私が実験的に完全で正しいと判断したものか、追加するものがありますか?

正しい場合、なぜこの2つのケースの違いがありますか?

答えて

1

インスタンスからコンポーネントへの暗黙的な変換がサポートされています。

ので、この:

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も親を公開していないので、まったく特別なケースもあります。

+0

Qt Quickに親と視覚の親があることに注意してください。それらはしばしば物体のために異なる。 – Orient

+0

* "インスタンスからコンポーネントへの暗黙的な変換がサポートされています。" *インスタンスはありません。 'Component'型の各プロパティに対して、コードを解析してコンポーネントにします。インスタンスをコンポーネントに暗黙的に変換する場合、 'sourceComponent:Qt.createComponent(" SomeQML.qml ")。createObject(...)'で失敗する* QQuickItemを割り当てることができません。 QQmlComponent * "を返します。 * "これは単に暗黙のバージョンです:" *は正しいです。 – derM

+0

* "Componentは特別なケースでもあることにも注意してください。親を公開していなくても、それは間違いなくあります。" * => 'QtObject'と同様に、Componentには視覚的な親はありません。 'Component {parent:...}'は失敗します。それはQt親という意味では親を持つかもしれませんが、視覚的な親を持たないかもしれません、そしてそれらはQMLで数えられるすべてです。非視覚の親は決して公開されない。 – derM

関連する問題