gpt4 book ai didi

QtQuickControls2对话框在点击外部时消失

转载 作者:行者123 更新时间:2023-12-01 01:45:34 25 4
gpt4 key购买 nike

我正在尝试使用 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用户无法与程序的其余部分进行交互。但是,如果我单击对话框外的某处,它就会消失(无需单击确定)。

最佳答案

我也遇到了这个。您需要设置 closePolicy 以便它仅在按下退出键时关闭:

closePolicy: Popup.CloseOnEscape

docs提到这个:

This property holds whether the popup is modal.

Modal popups often have a distinctive background dimming effect defined in overlay.modal, and do not allow press or release events through to items beneath them.

On desktop platforms, it is common for modal popups to be closed only when the escape key is pressed. To achieve this behavior, set closePolicy to Popup.CloseOnEscape.

The default value is false.



区别很难看出,但确实存在:模态弹出窗口不允许按下或释放事件传递到它们下面的项目,但这并不意味着它们不会关闭。

我不记得这背后的原因,但如果我不得不猜测,我会说这是因为 Qt Quick Controls 2 首先是为移动而构建的。在移动设备上,您通常会:
  • 想要一个弹出窗口的调光效果。
  • 不希望在它之外发生的触摸事件传递到它下面的项目。
  • 希望弹出窗口在用户点击它外部时关闭。

  • 如果您查看小部件,可以查看 QDialog::modal 的文档说:

    Setting this property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal.



    如果你再看 Qt::WindowModality :

    This enum specifies the behavior of a modal window. A modal window is one that blocks input to other windows. [...]



    和:

    The window is modal to the application and blocks input to all windows.



    所以虽然模态 QDialog当点击发生在它们之外时不要关闭,不让事件通过和不关闭之间的区别不是一个新的区别。

    关于QtQuickControls2对话框在点击外部时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49801259/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com