Как динамически обновить дочерний выпадающий список из родительского выпадающего списка - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть приложение QML, в котором есть два поля со списком, одно из которых является родительским (страна), другое - дочерним (город).При выборе страны в дочернем поле со списком одновременно должны быть указаны города страны.

У меня есть код, который первым полем со списком выбирает страну, но не устанавливает модель списка со списком города.Он устанавливается после повторного открытия приложения.

import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import Qt.labs.settings 1.0
ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    property alias comboBox: comboBox2
    Settings{
        property alias country : comboBox2.currentIndex
    }
    Dialog {
        id: dialog
        title: "Select Country"
        implicitWidth: parent.width
        implicitHeight: parent.height/2
        Column{
        ComboBox {
            id: comboBox2
            x: 199
            y: 176
            width: 277
            height: 48
            currentIndex: 0
            flat: false
            model: ["USA","Russia","Iran"]
        }
        }
    }
    ColumnLayout{
        anchors.horizontalCenter: parent.horizontalCenter
        spacing:20
        width: parent.width
    Button{
        anchors.horizontalCenter: parent.horizontalCenter
        id:select_country
        text:"select country"
        onClicked: dialog.open()
    }
    RowLayout{
        anchors.horizontalCenter: parent.horizontalCenter
        spacing:5
        width: parent.width
      Text {
         text:"Select City: "
       }
    ComboBox {
        id: comboBox1
        x: 199
        y: 176
        width: 277
        height: 48
        model: ListModel {
            id: model1
            dynamicRoles: true
            Component.onCompleted: {
                coord_combo()
                    }
            function coord_combo(){
                var i = comboBox1.currentIndex
                if (comboBox2.currentIndex===0){
                    comboBox1.model = ["New York","Washington","Houston"]
                    return comboBox1
                }
                else if (comboBox2.currentIndex === 1){
                    comboBox1.model = ["Moscow","Saint Petersburg","Novosibirsk"]

                    return comboBox1
                }
                else if (comboBox2.currentIndex === 2){
                    comboBox1.model = ["Tehran","Tabriz","Shiraz"]
                    return comboBox1
                }
            }
        }
    }
    }
    }
}

Я использовал функции javascript для изменения темы Material QML с помощью поля со списком.Но та же логика не работает для обновления модели списка другого комбинированного списка.Есть ли способ динамически обновить дочерний выпадающий список, используя qml и javascript?

1 Ответ

0 голосов
/ 22 декабря 2018

Вы должны использовать сигнал onCurrentIndexChanged в родительском ComboBox и обновлять дочерний элемент всякий раз, когда он запускается.Примерно так:

onCurrentIndexChanged:
{
    if(currentIndex === 0)
        comboBox1.model = ["New York", "Washington", "Houston"]
    ...
}

Вы можете пойти дальше и написать функцию, чтобы получить города текущей страны.Затем вы можете обновить модель дочернего ComboBox всякий раз, когда изменяется currentIndex родительского ComboBox.

...