Skip to main content
Passa al contenuto

Disposizioni dei moduli

Crea facilmente aree di interazione attraenti con Kirigami FormLayouts

I componenti Kirigami.FormLayout semplificano la creazione di moduli conformi alle Linee guida per l'interfaccia umana di KDE. Sono ottimali per le finestre di dialogo delle impostazioni e per grandi gruppi di controlli e campi di inserimento correlati tra loro.

Se dispone di spazio sufficiente, le disposizioni dei moduli occuperanno due colonne: la colonna di sinistra sarà occupata dalle etichette previste per i componenti figli del modulo, mentre quella di destra dai componenti figli stessi. Nelle finestre con spazi più limitati (o sui dispositivi mobili), i moduli saranno costituiti da un'unica colonna verticale con le etichette dei componenti secondari posizionate sopra il rispettivo componente.

Modulo semplice

I componenti Kirigami.FormLayout sono simili nell'uso ai componenti QtQuick Layout come ColumnLayout o RowLayout. I componenti figlio verranno automaticamente disposti in base alla dimensione disponibile per la disposizione del modulo.

I figli di un Kirigami.FormLayout hanno una proprietà denominata Kirigami.FormData.label. Questa proprietà consente di impostare l'etichetta che verrà fornita per il componente figlio in questione.

import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami

Kirigami.ApplicationWindow {
    pageStack.initialPage: Kirigami.Page {

        Kirigami.FormLayout {
            anchors.fill: parent

            Controls.TextField {
                Kirigami.FormData.label: "TextField 1:"
            }
            Controls.TextField {
                Kirigami.FormData.label: "TextField 2:"
            }
            Controls.TextField {
                Kirigami.FormData.label: "TextField 3:"
            }
        }
    }
}
Una disposizione del modulo semplice in modalità desktop

Una disposizione del modulo semplice in modalità desktop

Sezioni e separatori

I FormLayouts possono anche essere divisi in sezioni. Impostare il punto in cui inizia una sezione è facile come impostare Kirigami.FormData.isSection su true. Ciò fornirà al componente un margine extra nella parte superiore per delimitare l'inizio della nuova sezione.

I componenti Kirigami.Separator sono più adatti per iniziare nuove sezioni. I separatori vengono utilizzati per tracciare una sottile linea orizzontale, che delimita la fine di una sezione. Se preferisci non tracciare una linea tra le sezioni, puoi utilizzare una proprietà QML standard Item. In alternativa puoi utilizzare la proprietà Kirigami.FormData.isSection su qualsiasi altro componente.

Tuttavia, questo non è raccomandato. Sui componenti in cui Kirigami.FormData.isSection è impostato su "true", il testo dell'etichetta fornito per questo componente La proprietà Kirigami.FormData.label verrà visualizzata come testo dell'intestazione della sezione.

Il testo dell'intestazione è più grande del normale testo dell'etichetta: fornisce agli utenti un bel segnale visivo di cosa tratta la sezione della disposizione del modulo.

Kirigami.FormLayout {
    anchors.fill: parent

    Controls.TextField {
        Kirigami.FormData.label: "TextField 1:"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 2:"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 3:"
    }
    Kirigami.Separator {
        Kirigami.FormData.isSection: true
        Kirigami.FormData.label: "New Section!"
    }
    ColumnLayout {
        Kirigami.FormData.label: "Radio buttons"
        Controls.RadioButton {
            text: "Radio 1"
            checked: true
        }
        Controls.RadioButton {
            text: "Radio 2"
        }
        Controls.RadioButton {
            text: "Radio 3"
        }
    }
    Item {
        Kirigami.FormData.isSection: true
        Kirigami.FormData.label: "Another Section! (lineless though)"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 4:"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 5:"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 5:"
    }
}
Una disposizione del modulo con sezioni

Una disposizione del modulo con sezioni

Forzare una disposizione desktop o mobile

Se preferisci che la disposizione del modulo rimanga coerente, indipendentemente dall'ambiente dell'applicazione, puoi utilizzare la proprietà wideMode del componente Kirigami.FormLayout:

  • Quando viene impostato a vero la disposizione del modulo sarà strutturata in uno schermo largo ottimizzato per una disposizione su un desktop (a doppia colonna)
  • Quando viene impostato a falso la disposizione del modulo sarà strutturata in una disposizione per dispositivo mobile (a singola colonna)
Kirigami.FormLayout {
    anchors.fill: parent
    wideMode: false

    Controls.TextField {
        Kirigami.FormData.label: "TextField 1:"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 2:"
    }
    Controls.TextField {
        Kirigami.FormData.label: "TextField 3:"
    }
}
Una disposizione del modulo con disposizione mobile forzata

Una disposizione del modulo con disposizione mobile forzata

Allineamento delle etichette

In alcuni casi si desidera assegnare un'etichetta ai componenti che hanno più di una riga o a un elenco di componenti. Ciò può essere ottenuto inserendo Kirigami.FormData.label in ColumnLayout, come potresti aver notato in Sezioni e Separatori. Per impostazione predefinita, l'etichetta è posizionata al centro verticale della disposizione, il che non è sempre auspicabile. Possiamo cambiare questo con l'aiuto di Kirigami.FormData.labelAlignment.

Kirigami.FormLayout {
    anchors.fill: parent

    ColumnLayout {
        Kirigami.FormData.label: "This is a label:"
        Kirigami.FormData.labelAlignment: Qt.AlignTop

        Controls.Label {
            text: "This is some rather long text \nthat should elide to multiple lines \nto show how the label gets aligned."
            elide: Text.elideLeft
        }
    }
}
Una disposizione del modulo con l'etichetta allineata in alto

Una disposizione del modulo con l'etichetta allineata in alto

L'impostazione dell'allineamento delle etichette è particolarmente comoda per gestire componenti o liste di componenti di cui non si conosce a priori la dimensione. Elisa ne è un ottimo esempio:

L'etichetta Commento è allineata in alto solo quando il suo componente corrispondente ha più di una riga

L'etichetta Commento è allineata in alto solo quando il suo componente corrispondente ha più di una riga

Possiamo fare qualcosa di simile a questo con un operatore ternario JavaScript:

Kirigami.FormLayout {
    anchors.fill: parent

    ColumnLayout {
        Kirigami.FormData.label: "This is a label:"
        Kirigami.FormData.labelAlignment: labelText.text.lineCount > 1 ? Qt.AlignTop : Qt.AlignVCenter

        Controls.Label {
            id: labelText
            text: "This is some rather long text \nthat should elide to a new line \nso it appears below the Form Label."
            elide: Text.elideLeft
        }
    }
}