2015-08-05 15 views
12

Qual è la differenza tra Component e Item in QML? La documentazione non è assolutamente chiara qui. Qual è il tipo preferito da utilizzare come contenitore per più widget? Può essere sostituito da Rectangle?QML: componente vs articolo come contenitore

Per esempio, qual è la differenza tra le seguenti dichiarazioni:

Item { 
    id: itemWidget 

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

e

Component { 
    id: componentWidget 

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

Perché usiamo di solito Component quando si dichiara una delegate?

+3

Cosa non capisci riguardo i documenti? Non possono essere migliorati se non dici perché non sono chiari. Penso che siano abbastanza chiari e qualsiasi risposta che otterrete sarà molto probabilmente una riformulazione di ciò che già esiste. – Mitch

+0

Sono d'accordo con @Mitch, la documentazione Qt è la migliore documentazione che abbia mai visto, quindi se hai trovato che non è chiaro penso che non troverai alcun aiuto qui. – folibis

+0

Aggiunto qualche esempio alla domanda descrizione – Dmitry

risposta

12

La differenza tra questi due frammenti è che Rectangle verrà immediatamente visualizzato. Questo è scritto nel documentation:

Si noti che mentre un rettangolo di per sé sarebbe resa e visualizzato automaticamente, questo non è il caso per il rettangolo di cui sopra, perché è definita all'interno di un componente. Il componente incapsula i tipi QML all'interno, come se fossero definiti in un file QML separato e non viene caricato fino a quando richiesto (in questo caso, dai due oggetti Loader). Poiché Component non deriva da Item, non puoi ancorare nulla ad esso.

Quando si dichiarano i delegati, viene utilizzato Component perché sono presenti diversi elementi delegati che devono essere creati. Un singolo Item non funziona qui. Puoi pensare a Component come modello da cui puoi creare oggetti.

+0

Grazie per questa nota - quello era il mio punto di dubbio! – Dmitry

1

A Component è un concetto e una cosa in QML. Un Item è una cosa visiva definita nel modulo QtQuick che è utilizzabile in QML. Queste due cose sono concettualmente diverse.

Come nel concetto QML, tutta la parte riutilizzabile è chiamata componenti. È possibile definire un componente in più modi, ma un modo semplice è creare un file .qml e denominarlo come si nomina il componente. vale a dire Button.qml o Swithc.qml. Quando il motore QML carica quel file, puoi utilizzarlo come pulsanti o interruttori.

Un altro modo per definire un componente è utilizzare Component {} in un file qml. Ciò consente di definire un nuovo componente in linea. Un componente definito in linea non funziona dopo il caricamento esplicito da loader.

Un Item, d'altra parte, è un tipo semplice definito nel modulo QtQuick.

penso che sia OK per chiamare un Item un Component anche se un Item non è tecnicamente ereditato da Component. O più precisamente, puoi dire che il tuo componente personalizzato si basa su un Item se il tuo .qml ha il Item come tipo root.

Problemi correlati