QML: MessageDialog closes on click outside

428 Views Asked by At

I'm trying to show an QML MessageDialog with Qt 6.4.3. This dialog should be closed with the provided button.

import QtQuick
import QtQuick.Controls
import QtQuick.Dialogs

ApplicationWindow  {
    id: window

    width: 800
    height: 600

    visible: true

    title: qsTr("Hello World")

    Component.onCompleted: dialog.open()

    MessageDialog{
        id: dialog

        modality: Qt.ApplicationModal

        title: "Test Dialog"
        text: "My Text"

        buttons: MessageDialog.Ok
    }
}

PROBLEM: The dialog is dismissed, if the user clickes outside the dialog. I would expect the dialog to stay visible until the user pressed the OK button.

What is my mistake in the following example? How can I achieve, that the dialog stays visible until the user pressed the button?

1

There are 1 best solutions below

3
Stephen Quan On

If you're interested in a workaround, you can force the dialog to stay up until the user accepts by catching the reject and forcing the dialog to open again:

import QtQuick
import QtQuick.Controls
import QtQuick.Dialogs
Page {
    MessageDialog{
        id: dialog
        modality: Qt.ApplicationModal
        title: "Test Dialog"
        text: "My Text"
        buttons: MessageDialog.Ok
        onRejected: Qt.callLater(dialog.open)
    }
    Button {
        text: qsTr("Open")
        anchors.horizontalCenter: parent.horizontalCenter
        y: parent.height * 2 / 10
        onClicked: dialog.open()
    }
}

You can Try it Online!