首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtQuickControls2对话框在单击外部消失

QtQuickControls2对话框在单击外部消失
EN

Stack Overflow用户
提问于 2018-04-12 16:08:16
回答 1查看 2.1K关注 0票数 5

我正在尝试使用QtQuickControls2对话框:

代码语言:javascript
复制
    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
        }
    }

如果单击按钮而problemFlagtrue,则应触发该按钮。我读到,如果modal设置为true,则用户无法与程序的其余部分交互。但是,如果我单击对话框之外的某个位置,它就会消失(不需要单击OK)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 16:43:02

我也碰到这个了。您需要设置closePolicy,使其仅在按下转义键时才关闭:

代码语言:javascript
复制
closePolicy: Popup.CloseOnEscape

文档提到了这一点:

此属性保存弹出窗口是否为模态。 模式弹出通常有一个独特的背景调光效果定义在overlay.modal,不允许新闻或发布事件通过他们下面的项目。 在桌面平台上,模式弹出窗口通常只在按下转义键时才关闭。要实现此行为,请将closePolicy设置为Popup.CloseOnEscape.。 默认值为false。

这种区别很难看出,但它是存在的:模式弹出窗口不允许新闻或发布事件通过他们下面的项目,但这并不意味着他们不会关闭。

我不记得这背后的原因,但如果我不得不猜测,我会说这与QtQuickControls2是首先为移动环境构建的事实有关。在移动设备上,您通常:

  1. 想要弹出窗口的调光效果。
  2. 不希望发生在它之外的触摸事件进入它下面的项目。
  3. 当用户点击外部时,希望弹出窗口关闭。

如果您查看小部件,QDialog::modal的文档如下:

将此属性设置为true等同于将QWidget::windowModality设置为Qt::ApplicationModal。

如果你看看Qt::WindowModality

此枚举指定模态窗口的行为。模态窗口是阻止输入到其他窗口的窗口。..。

以及:

该窗口对应用程序是模态的,并阻止输入到所有窗口。

因此,尽管模态QDialog不会在它们之外发生单击时关闭,但不让事件通过和不关闭之间的区别并不是一个新的区别。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49801259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档