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!