如何从 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
}
}
我正在尝试从菜单栏打开一个 "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
}
}