带有 tabview 的 QML 重置对话框

QML reset dialog with tabview

我试图在 QML 中实现选项卡式 Dialog,并使用将其重置为初始值的方法。

由于选项卡是动态实例化的,因此 none 的直接方法似乎可行。父 Dialog 不能引用内部 ComboboxCombobox 不能引用外部 Dialog。如何实现?

import QtQuick 2.3
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1

Dialog {
    id: dlg
    title: "Settings"
    visible: true
    standardButtons: StandardButton.Apply | StandardButton.Reset
    property string val: ""
    onApply: console.log(val)
    onReset: {
        // RESET COMBOBOX TO DEFAULT
    }
    TabView {
        id: tabView
        anchors.fill: parent
        Tab {
            title: "ValueTab"
            id: tabVal
            GridLayout {
                id: gridVal
                anchors.fill: parent
                GroupBox {
                    title: qsTr("Choose value")
                    id: gb
                    Layout.fillWidth: true
                    ColumnLayout {
                        anchors.fill: parent
                        id: cl
                        ComboBox {
                            id: valueChooser
                            editable: false
                            model: ListModel {
                                id: listModel
                                ListElement { text: "One" }
                                ListElement { text: "Two" }
                                ListElement { text: "Three" }
                            }
                            Layout.fillWidth: true
                            onCurrentTextChanged : val = currentText
                        }
                    }
                }
            }
        }
    }
}

我很不确定,如果我像你说的那样回答你的问题,你不能从 Combobox 中引用 Dialog。我看不出原因。

假设你的例子确实包含你的问题,你想要做的就是在按下重置按钮后重置值(并且你知道原始值),这就是我将如何解决它。
使用 Connections 类型从 Combobox

连接到 Dialogreset()
import QtQuick 2.3
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1

Dialog {
    id: dlg
    title: "Settings"
    visible: true
    standardButtons: StandardButton.Apply | StandardButton.Reset
    property string val: ""
    onApply: console.log(val)
    onReset: {
        // **DONT** RESET COMBOBOX TO DEFAULT **HERE**
    }
    TabView {
        id: tabView
        anchors.fill: parent
        Tab {
            title: "ValueTab"
            id: tabVal
            GridLayout {
                id: gridVal
                anchors.fill: parent
                GroupBox {
                    title: qsTr("Choose value")
                    id: gb
                    Layout.fillWidth: true
                    ColumnLayout {
                        anchors.fill: parent
                        id: cl
                        ComboBox {
                            id: valueChooser
                            editable: false
                            model: ListModel {
                                id: listModel
                                ListElement { text: "One" }
                                ListElement { text: "Two" }
                                ListElement { text: "Three" }
                            }
                            Layout.fillWidth: true
                            onCurrentTextChanged : val = currentText

                            /// *** INTERESTING PART HERE! ***
                            Connections {
                                target: dlg
                                onReset: {
                                    // RESET COMBOBOX TO DEFAULT **HERE** INSTEAD
                                    valueChooser.currentIndex = 0
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}