如何从其他.qml文件正确弹出对话框并调整对话框大小

时间:2018-10-24 12:34:49

标签: qt qml qtquickcontrols2

学习qml并尝试将主窗口和设置分开在不同的文件中。我有一个带简单对话框的SettingsView.qml,还有一个main.qml,在其中我可以调用菜单并调用我的设置对话框来弹出。当我在main.qml中有一个Dialog时,它很好,并且已经正确调整了整个窗口的大小。但是在将其移至其他文件后,行为发生了变化。现在,我也收到一条消息:“未定义refSettingsDialog” 。如果有任何建议,我将不胜感激。

upd:关闭。这里不需要属性等,只是基础知识。并且不要从另一个文件调用ID。就我所知,Atleast

SettingsView.qml

Dialog{
    id: settingsDialog
    modal: true
    focus: true
    title: "Settings"

    standardButtons: Dialog.Ok | Dialog.Cancel
    onAccepted: {
        settingsDialog.close()
    }
    onRejected: {
        settingsDialog.close()
    }
}

main.qml

ApplicationWindow {
    visible: true
    id: screen
    property alias mainScreen: screen
    width: 640
    height: 480
    property alias screenWidth: screen.width
    property alias screenHeight: screen.height
    title: qsTr("McdtViewer")
    Material.theme: Material.Dark
    Material.accent: Material.Yellow

    SystemPalette { id: activePalette  }

    //toolbar
    header: ToolBar {
        RowLayout {
            spacing: 20
            anchors.fill: parent

            ToolButton {
                icon.name: contentSwiper.currentIndex === 1 ? "Back" : "пустой"
                onClicked:  {
                    if (contentSwiper.currentIndex === 1){
                        contentSwiper.pop()
                    }
                }
            }

            Label {
                id: titleLabel
                text: contentSwiper.currentIndex === 0? "ExpWatcher": "ExpView"
                font.pixelSize: 20
                elide: Label.ElideRight
                horizontalAlignment: Qt.AlignHCenter
                verticalAlignment: Qt.AlignVCenter
                Layout.fillWidth: true
            }
            ToolButton {
                icon.name: "menu"
                onClicked: optionsMenu.open()

                Menu {
                    id: optionsMenu
                    x: parent.width - width
                    transformOrigin: Menu.TopRight

                    MenuItem {
                        text: "Settings"
                        //calling the instance of settingView which we declared in the bottom
                        onTriggered: {
                             settingsView.open()
                        }
                    }
                }
            }
        }
    }

    }
    // making instance of settingsDialog here so the width will be calculated properly.
    SettingsView{
        id: settingsView
        x: Math.round((screenWidth - width) / 2)
        y: Math.round(screenHeight / 6)
        width: Math.round(Math.min(screenWidth, screenHeight) / 3 * 2)
    }
}

0 个答案:

没有答案