QML:在结束申请前要求确认

时间:2017-11-08 09:01:25

标签: c++ events qml exit

我有一个QtQuick应用程序。当用户试图关闭应用程序时,我想要一个"你确定吗?"弹出窗口。

我的主要C ++类有这个:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

我的主要QML类有一个应用程序窗口:

ApplicationWindow {
    id: root
    ...
}

我会在哪里以及如何捕捉近距离事件?我从QMainWindow方法或者其他方面读到了覆盖closeEvent(),但是我没有QMainWindow,我也不知道我把代码放在哪里。

因此,我想知道如何阻止应用关闭以及其他事情发生,以及当用户点击" ok"以后我将如何关闭应用。在确认对话框中。

据我所知,ApplicationWindow" onClosing"只允许我在不可避免的关闭之前做一些清理,但它不会阻止关闭(如果我错了,请纠正我)

3 个答案:

答案 0 :(得分:2)

我解决了。

ApplicationWindow {
    id: root
    onClosing: close.accepted = false
}

这可以防止应用关闭。

root.close()

这会关闭应用。

答案 1 :(得分:1)

import QtQuick 2.13
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.13
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.3

ApplicationWindow  {
   property bool closing: false

   MessageDialog {
      id: exitMessageDialogId
      icon: StandardIcon.Question
      text: "Are you sure to exit?"
      standardButtons: StandardButton.Yes | StandardButton.No
      onYes: {
         closing = true
         mainWindowId.close()
      }
   }
   onClosing: {
      close.accepted = closing
      onTriggered: if(!closing) exitMessageDialogId.open()
   }

   id: mainWindowId
}

在这种情况下,它只是关闭当前窗口。

答案 2 :(得分:0)

//使用Qt 5.11.2 //用于android y桌面

import QtQuick 2.9
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.2

ApplicationWindow {

    title: qsTr("xxxx xxxx")

    id: mainWindow
    visible: true


    //desision para salir
    MessageDialog {
        id: messageDialogQuit
        title: "Deseas salir?"
        icon: StandardIcon.Question
        text: "xxxxxxxxxxxxxxxxxxxxxxxxx."

        standardButtons: StandardButton.Yes |StandardButton.No
        //        Component.onCompleted: visible = true
        onYes: Qt.quit()
        //        onNo: console.log("didn't copy")
    }

    onClosing:{
        close.accepted = false
        onTriggered: messageDialogQuit.open()
    }

    menuBar: MenuBar {
        id: m_menu
        LayoutMirroring.enabled: true
        LayoutMirroring.childrenInherit: true
        anchors.left: parent.left
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("Exit")
                onTriggered: messageDialogQuit.open()

            }

        }

    }
    width: 400
    height: 300

}