num*_*her 5 qt qml qt-quick qtquickcontrols2
我正在尝试使用 QtQuickControls2 对话框:
Dialog {
id: dialog
x: parent.width/2-width/2
y: parent.height/2-height/2
width:300
height:200
title: "Warning"
modal: true
standardButtons: Dialog.Ok
visible: false
onAccepted: console.log("Ok clicked")
}
Button {
id: button
objectName: "doSomethingButton"
onClicked: {
if(problemFlag==true)
dialog.visible=true
}
}
Run Code Online (Sandbox Code Playgroud)
如果按钮被点击并且problemFlag是 ,它应该被触发true。我读到如果modal设置为true用户无法与程序的其余部分交互。但是,如果我单击对话框外的某处,它就会消失(无需单击“确定”)。
我也遇到了这个。您需要设置,closePolicy使其仅在按下转义键时关闭:
closePolicy: Popup.CloseOnEscape
Run Code Online (Sandbox Code Playgroud)
文档提到了这一点:
该属性保存弹出窗口是否是模态的。
模态弹出窗口通常具有在overlay.modal中定义的独特背景变暗效果,并且不允许按下或释放事件到达其下方的项目。
在桌面平台上,通常只有在按下退出键时才会关闭模式弹出窗口。要实现此行为,请将 closePolicy 设置为 Popup.CloseOnEscape。
默认值为 false。
区别很难看出,但确实存在:模式弹出窗口不允许按下或释放事件到达其下方的项目,但这并不意味着它们不会关闭。
我不记得这背后的原因,但如果我不得不猜测,我会说这与 Qt Quick Controls 2 是首先为移动设备构建的事实有关。在移动设备上,您通常:
如果您查看小部件,文档会QDialog::modal说:
将此属性设置为 true 相当于将 QWidget::windowModality 设置为 Qt::ApplicationModal。
如果你接着看Qt::WindowModality:
该枚举指定模式窗口的行为。模态窗口是一种阻止其他窗口输入的窗口。[...]
和:
该窗口对于应用程序来说是模态的,并阻止所有窗口的输入。
因此,尽管模态QDialog框在外部发生点击时不会关闭,但不让事件通过和不关闭之间的区别并不是一个新概念。
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |