2015-08-05 11 views
12

Was ist der Unterschied zwischen Component und Item in QML? Die Dokumentation ist hier nicht absolut klar. Was ist der bevorzugte Typ, der als Container für mehrere Widgets verwendet wird? Kann es durch Rectangle ersetzt werden?QML: Komponente vs Artikel als Container

Zum Beispiel, was ist der Unterschied in den folgenden Erklärungen:

Item { 
    id: itemWidget 

    Rectangle { id: one } 
    Rectangle { id: two } 
} 

und

Component { 
    id: componentWidget 

    Rectangle { id: one } 
    Rectangle { id: two } 
} 

Warum in der Regel haben wir Component verwenden, wenn eine delegate erklären?

+3

Was verstehst du nicht über die Dokumente? Sie können nicht verbessert werden, wenn Sie nicht sagen, warum sie nicht klar sind. Ich denke, dass sie ziemlich klar sind, und jede Antwort, die Sie hier bekommen, wird höchstwahrscheinlich eine Neuformulierung dessen sein, was bereits existiert. – Mitch

+0

Ich stimme @Mitch zu, die Qt-Dokumentation ist die beste Dokumentation, die ich je gesehen habe, wenn Sie das nicht klar finden, denke ich, dass Sie hier keine Hilfe finden werden. – folibis

+0

Ein Beispiel zur Fragebeschreibung hinzugefügt – Dmitry

Antwort

12

Der Unterschied zwischen diesen beiden Schnipsel ist, dass der Rectangle sofort angezeigt wird. Dies ist in den documentation geschrieben:

Beachten Sie, dass, während ein Rechteck von selbst automatisch wiedergegeben werden würde und angezeigt werden, das für das oben Rechteck nicht der Fall ist, weil es in einer Komponente definiert ist. Die Komponente kapselt die QML-Typen darin ein, als ob sie in einer separaten QML-Datei definiert wären, und wird erst geladen, wenn sie angefordert werden (in diesem Fall von den beiden Loader-Objekten). Da die Komponente nicht von Item abgeleitet ist, können Sie nichts daran verankern.

Bei der Deklaration von Delegaten wird Component verwendet, da mehrere Delegatelemente erstellt werden müssen. Eine einzige Item funktioniert hier nicht. Sie können sich Component als Vorlage vorstellen, aus der Sie Objekte erstellen können.

+0

Danke für diesen Hinweis - das war mein Zweifel! – Dmitry

1

Ein Component ist sowohl ein Konzept als auch eine Sache in QML. Ein Item ist eine visuelle Sache im QtQuick-Modul definiert, die in QML verwendet werden kann. Diese beiden Dinge sind konzeptionell unterschiedlich.

Wie im QML-Konzept werden alle wiederverwendbaren Dinge Komponenten genannt. Sie können eine Komponente auf mehrere Arten definieren, aber eine einfache Möglichkeit besteht darin, eine .qml Datei zu erstellen und sie so zu benennen, wie Sie Ihre Komponente benennen. B. Button.qml oder Swithc.qml. Wenn die QML-Engine diese Datei lädt, können Sie diese als Schaltflächen oder Schalter verwenden.

Eine andere Möglichkeit zum Definieren einer Komponente ist die Verwendung von Component {} in einer qml-Datei. Auf diese Weise können Sie eine neue Komponente inline definieren. Eine Komponente definiert Inline funktioniert nicht nach dem expliziten Laden von loader.

Ein Item, auf der anderen Seite, ist ein einfacher Typ im QtQuick-Modul definiert.

Ich denke, es ist OK ein Item ein Component sogar zu nennen, obwohl ein Item technisch nicht von Component vererbt wird. Genauer gesagt könnten Sie sagen, dass Ihre benutzerdefinierte Komponente auf einem Item basiert, wenn Ihre .qmlItem als Stammtyp hat.