2015-08-05 18 views
12

Jaka jest różnica między Component i Item w QML? Dokumentacja nie jest tu całkowicie jasna. Jaki jest preferowany typ używanego jako kontener dla kilku widżetów? Czy można go wymienić przez Rectangle?QML: Component vs Item jako kontener

Na przykład, jaka jest różnica w następujących deklaracji:

Item { 
    id: itemWidget 

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

i

Component { 
    id: componentWidget 

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

Dlaczego zazwyczaj używamy Component podczas deklarowania delegate?

+3

Czego nie rozumiesz w dokumentach? Nie można ich poprawić, jeśli nie powiesz, dlaczego nie są jasne. Myślę, że są one całkiem jasne, a każda odpowiedź, którą tu uzyskasz, najprawdopodobniej zmieni treść tego, co już istnieje. – Mitch

+0

Zgadzam się z @Mitch, dokumentacja Qt jest najlepszymi dokumentami, jakie kiedykolwiek widziałem, więc jeśli uważasz, że nie jest to jasne, myślę, że nie znajdziesz tutaj żadnej pomocy. – folibis

+0

Dodano przykład do opisu pytania – Dmitry

Odpowiedz

12

Różnica między tymi dwoma urywkami jest taka, że ​​Rectangle zostanie natychmiast wyświetlony. To jest napisane w documentation:

Uwaga, podczas gdy sam prostokąt zostanie automatycznie wygenerowana i wyświetlona, ​​to nie jest w przypadku powyższego prostokąta, ponieważ jest zdefiniowana wewnątrz komponentu. Komponent zawiera w sobie typy QML, tak jakby były zdefiniowane w oddzielnym pliku QML, i nie jest ładowany do momentu żądania (w tym przypadku przez dwa obiekty Loader). Ponieważ komponent nie pochodzi z elementu, nie można go zakotwiczyć.

Podczas deklarowania delegatów używa się Component, ponieważ należy utworzyć kilka elementów delegowanych. Pojedynczy Item nie działa tutaj. Można myśleć o Component jako szablonie, z którego można tworzyć obiekty.

+0

Dzięki za tę notatkę - to był mój punkt widzenia! – Dmitry

1

A Component jest zarówno pojęciem, jak i rzeczą w QML. An Item jest rzeczą wizualną zdefiniowaną w module QtQuick, który jest użyteczny w QML. Te dwie rzeczy różnią się pod względem koncepcyjnym.

Podobnie jak w przypadku koncepcji QML, wszystkie rzeczy do ponownego użycia są nazywane komponentami. Możesz zdefiniować komponent na wiele sposobów, ale jednym z łatwych sposobów jest utworzenie pliku .qml i nadanie mu nazwy, gdy nadejdzie nazwa komponentu. tj. Button.qml lub Swithc.qml. Kiedy mechanizm QML załaduje ten plik, możesz go użyć jako przycisków lub przełączników.

Innym sposobem zdefiniowania komponentu jest użycie Component {} w pliku qml. Umożliwia to zdefiniowanie nowego składnika w linii. Komponent zdefiniowany jako wbudowany nie działa po jawnym załadowaniu przez loader.

Z drugiej strony, Item jest prostym typem zdefiniowanym w module QtQuick.

myślę, że jest OK, aby wezwać Item się Component chociaż Item nie jest technicznie odziedziczoną Component. Mówiąc dokładniej, możesz powiedzieć, że Twój komponent niestandardowy jest oparty na Item, jeśli Twój .qml ma Item jako typ root.

Powiązane problemy