如何动态地更新从父组合框的子组合框(How to dynamically update a chil

2019-10-28 08:36发布

我有两个组合框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函数中使用组合框来改变材料QML主题。 但同样的逻辑不更新其他组合框列表模式工作。 有什么办法来更新子组合框动态使用QML和JavaScript?

Answer 1:

您应该使用onCurrentIndexChanged在父母的ComboBox信号时,它被触发更新的孩子。 像这样的事情;

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

你可以更进一步,编写一个函数来获取当前国家的城市。 然后你就可以更新子组合框的模式每当currentIndex的父组合框的变化。



文章来源: How to dynamically update a child combobox from parent combobox