Home / Programmazione / C - C++ / Passare parametri tra finestre in QML
Mattepuffo

Passare parametri tra finestre in QML

Passare parametri tra finestre in QML

Sono due giorni che combatto con questa cosa, quindi vi posto subito la soluzione appena trovata.

Il problema è questo: da un evento devo avviare un'altra finestra passandogli un valore.

Tutto ciò in QML, dove non esiste il concetto di costruttori con parametri.

L'evento è un doppio click su una tabella.

I dati nella tabella li prendo da un web service, ma questo non è molto importante.

L'importante è come recuperare i dati nella seconda finestra.

Nella tabella imposto questo:

    Rectangle {
        x: 0
        y: 70
        width: parent.width
        height: 820
        TableView {
            id: lw
            x: 0
            y: 0
            width: parent.width
            height: parent.height
            alternatingRowColors: true
            TableViewColumn {
                role: "npu"
                title: "NPU"
                width: root.width / 2
            }
            TableViewColumn {
                role: "conto"
                title: "CONTO"
                width: root.width / 2
            }
            onDoubleClicked: {
                var choosed = clientiModel.get(row).npu;
                var comp = Qt.createComponent("Cliente.qml");
                var wind = comp.createObject(clientiRoot, {"npu": choosed});
                wind.show();
            }
            model: clientiModel
        }
 
    }

Guardate il metodo createObject: come secondo parametro gli passo un valore in formato chiave:valore.

Nella seconda finestra faccio questo:

Window {
    id: clienti
    visible: true
    width: 800
    height: 800
    minimumWidth: 800
    minimumHeight: 800
    maximumWidth: 800
    maximumHeight: 800
    title: qsTr("Cliente")
 
    property var npu
 
    onAfterRendering: {
        console.log(npu)
    }
 
    .....................
}

Dopo i vari parametri di inizializzazione, imposto una property, che si chiama come la chiava passata in precedenza.

Poi semplicemente la stampo in console.

Enjoy!