我有一个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"只允许我在不可避免的关闭之前做一些清理,但它不会阻止关闭(如果我错了,请纠正我)
答案 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
}