我正在尝试使用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
}
}如果单击按钮而problemFlag为true,则应触发该按钮。我读到,如果modal设置为true,则用户无法与程序的其余部分交互。但是,如果我单击对话框之外的某个位置,它就会消失(不需要单击OK)。
发布于 2018-04-12 16:43:02
我也碰到这个了。您需要设置closePolicy,使其仅在按下转义键时才关闭:
closePolicy: Popup.CloseOnEscape文档提到了这一点:
此属性保存弹出窗口是否为模态。 模式弹出通常有一个独特的背景调光效果定义在overlay.modal,不允许新闻或发布事件通过他们下面的项目。 在桌面平台上,模式弹出窗口通常只在按下转义键时才关闭。要实现此行为,请将closePolicy设置为Popup.CloseOnEscape.。 默认值为false。
这种区别很难看出,但它是存在的:模式弹出窗口不允许新闻或发布事件通过他们下面的项目,但这并不意味着他们不会关闭。
我不记得这背后的原因,但如果我不得不猜测,我会说这与QtQuickControls2是首先为移动环境构建的事实有关。在移动设备上,您通常:
如果您查看小部件,QDialog::modal的文档如下:
将此属性设置为true等同于将QWidget::windowModality设置为Qt::ApplicationModal。
如果你看看Qt::WindowModality
此枚举指定模态窗口的行为。模态窗口是阻止输入到其他窗口的窗口。..。
以及:
该窗口对应用程序是模态的,并阻止输入到所有窗口。
因此,尽管模态QDialog不会在它们之外发生单击时关闭,但不让事件通过和不关闭之间的区别并不是一个新的区别。
https://stackoverflow.com/questions/49801259
复制相似问题