【问题标题】:QML: Asking confirmation before closing applicationQML:在关闭申请前询问确认
【发布时间】:2020-05-08 00:12:59
【问题描述】:

我有一个 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 并且我不知道我将把该代码放在哪里。

所以我想知道如何防止应用关闭并让其他事情发生,以及稍后当用户在确认对话框中单击“确定”时我将如何关闭应用。

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

【问题讨论】:

  • 酷,你解决了它!但解决方案不是问题的一部分。为了让一切都井井有条,请编辑您的问题,再次删除解决方案,然后将其作为答案发布。然后,尽快将该答案标记为正确答案。然后,寻找该答案的人可以第一眼看到这个问题一个答案。另一方面,寻求帮助的人知道这里一切都很好,他们不需要打扰。谢谢!

标签: c++ events qml exit


【解决方案1】:

我解决了。

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

这可以防止应用关闭。

root.close()

这会关闭应用程序。

【讨论】:

    【解决方案2】:
    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
    }
    

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

    【讨论】:

      【解决方案3】:

      //使用Qt 5.11.2 // 对于安卓和桌面

      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
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多