我正在尝试使用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
,则用户无法与程序的其余部分进行交互。但是,如果我单击Dialog之外的某个位置,它就会消失(无需单击OK)。
答案 0 :(得分:3)
我也碰到了这个。您需要设置closePolicy
,以便仅在按下转义键时关闭它:
closePolicy: Popup.CloseOnEscape
docs提到这个:
此属性保持弹出窗口是否为模态。
模态弹出窗口通常具有独特的背景调光效果 在overlay.modal中定义,并且不允许按下或释放事件 通过他们下面的物品。
在桌面平台上,模态弹出窗口通常只能关闭 当按下退出键时。要实现此行为,请设置 closePolicy to Popup.CloseOnEscape。
默认值为false。
区别很难看,但它存在:模态弹出窗口不允许按下或释放事件到它们下面的项目,但这并不意味着它们不会关闭。
我不记得这背后的原因,但如果我不得不猜测,我会说Qt Quick Controls 2首先是为移动设备制造的。在移动设备上,您通常会:
如果您查看小部件,QDialog::modal
的文档会说:
将此属性设置为true等同于设置 QWidget :: windowModality到Qt :: ApplicationModal。
如果你看Qt::WindowModality
:
此枚举指定模态窗口的行为。模态窗口是阻止其他窗口输入的窗口。 [...]
和
窗口是应用程序的模态,阻止输入到所有窗口。
因此,虽然模态QDialog
在点击发生时不会关闭,但不允许事件通过和不关闭之间的区别不是新的。