2016-02-22 10 views
8

Na przykład to działa:Qt5 QML, kiedy używać kolumny ColumnLayout vs Column?

import QtQuick 2.5 
import QtQuick.Controls 1.4 
import QtQuick.Controls.Styles 1.4 
import QtQuick.Layouts 1.2 

ApplicationWindow 
{ 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    function thingWidth() 
    { 
     return width*80/100 
    } 

    Column 
    { 
     spacing: 10; 
     anchors.horizontalCenter: parent.horizontalCenter 

     Thing { color: "red"; width: thingWidth(); } 
     Thing { color: "yellow"; width: thingWidth(); } 
     Thing { color: "green"; width: thingWidth(); } 
    } 

} 

jednak zmienić Column do ColumnLayout i nie (zmiany rozmiaru okna powoduje, że układ się nie udać).

każda pomoc, dzięki.

EDIT 1:

Tutaj też Thing.qml zgodnie z wnioskiem,

import QtQuick 2.0 

Item { 
    property alias color: rectangle.color 
    width: 50; height: 50 

    Rectangle 
    { 
     id: rectangle 
     border.color: "white" 
     anchors.fill: parent 
    } 
} 

Wygląda jak mój post jest głównie kod. Tak, niania to robi! to dlatego, że ludzie publikują tutaj kod.

+1

Proszę albo a) podać kod dla 'Thing', lub b) zastąpić je czymś, do czego mamy dostęp, np.' Rectangle'. – Mitch

+0

zrobione. Przepraszam za opiekuna –

Odpowiedz

3

Począwszy od documentation z Column:

kolumna jest typem, który pozycjonuje jego elementy podrzędne wzdłuż jednej kolumnie. Może być używany jako wygodny sposób pionowego pozycjonowania serii elementów bez użycia kotwic.

Co więcej, ułatwia przechodzenie podczas wstawiania, kasowania i tak dalej. Dołącza także do przedmiotów, aby przekazać im wyobrażenia o swoich pozycjach.

Z drugiej strony, this jest dokumentacja GridLayout (proszę pamiętać, że to narzędzie ColumnLayout wygoda, ale to nie jest niczym więcej niż siatki z jednej kolumny, a od jego documentation).
Ma zupełnie inny zestaw właściwości, a także właściwości przyłączone, całkowicie zorientowane na rozmieszczenie przedmiotów.

Zgaduję jednak, że najciekawszą stroną z dokumentacji jest that.
po prostu cytować go: pozycje

pozycjonera są elementy kontenerów, które zarządzają położeń elementów w deklaratywny interfejs użytkownika. Pozycjonery zachowują się podobnie do menedżerów układu używanych ze standardowymi widżetami Qt, z tym wyjątkiem, że same są także kontenerami.

Pozycjonery ułatwiają pracę z wieloma przedmiotami, gdy muszą być rozmieszczone w regularnym układzie.

Szybkie układy Qt mogą być również używane do układania elementów Qt Quick w interfejsie użytkownika. Zarządzają zarówno pozycjami, jak i rozmiarami elementów w deklaratywnym interfejsie użytkownika i są dobrze dostosowane do skalowalnych interfejsów użytkownika.

Proszę pamiętać, że Column jest Positioner, natomiast ColumnLayout jest Layout. Kiedy ich używać, jak zwykle, zależy głównie od celu.

+1

Dziękuję za odpowiedź. Jak rozumiem, pozycjonerom takim jak "Column" można powiedzieć pozycje, ale układy takie jak "ColumnLayout" muszą same obliczyć pozycję. Ustawienie 'width' wewnątrz' ColumnLayout' jest złe, ale w 'Column' jest OK. –

+1

W układach masz wiele interesujących załączonych właściwości, takich jak 'Layout.preferredwidth'. Zobacz powiązaną dokumentację. – skypjack

+0

Układy zostały dodane, gdy Qt musi obsługiwać ekrany o bardzo różnych rozmiarach, tj. Po wieku nokia. Rzeczywiście masz właściwość 'fill', której brakuje w drugiej implementacji. Jest to również podkreślane w dokumentacji, gdy mówi, że są one "dobrze dopasowane do ** skalowalnych ** interfejsów użytkownika" – BaCaRoZzo

Powiązane problemy