如何从 MenuBar QML 打开对话框

How to open a dialog from a MenuBar QML

我正在尝试从菜单栏打开一个 "About" 对话框。

我有一个 MainMenuBar.qml 看起来像这样:

import QtQuick 2.12
import './dialogs'

Labs.MenuBar {

    // Various menus omitted

    AboutDialog {
        id: about_dialog
    }

    Labs.Menu {
        title: qsTr('&Help')

        Labs.MenuItem {
            text: qsTr('&About')
            onTriggered: about_dialog.open()
        }
    }
}

还有我的AboutDialog.qml:

import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13

Dialog {
    title: qsTr('id_about')
    width: 500
    height: 350
    standardButtons: Dialog.Ok

    Page {
        anchors.fill: parent

        header: RowLayout {
            Image {
                Layout.margins: 16
                source: "../ic_home.png"
            }
        }

        Label {
            anchors.fill: parent
            anchors.margins: 32
            wrapMode: Text.WordWrap
            text: qsTr("Hello world")
        }
    }
}

单击 "About" 时,我得到:

/src/MainMenuBar.qml: QML Dialog: cannot find any window to open popup in.

我想这是因为我是从菜单栏而不是 window 打开它的——这可能吗?我该怎么办?

没关系,我想通了。 AboutDialog.qml 不应在 MainMenuBar.qml 中声明,而应在 main.qml 中声明。

MainMenuBar.qml

import QtQuick 2.12
import './dialogs'

Labs.MenuBar {

    // Various menus omitted
    Labs.Menu {
        title: qsTr('&Help')

        Labs.MenuItem {
            text: qsTr('&About')
            onTriggered: about_dialog.open()
        }
    }
}

main.qml

Item {
   MainMenuBar { }

    AboutDialog {
        id: about_dialog
    }
}