我想以编程方式关闭qml qt应用程序。我尝试了此处描述的方法如何在Qt QML中退出C++应用程序
Qt.callLater(Qt.quit)
通过qml并使用
QObject::connect(&engine, &QQmlApplicationEngine::quit, &QGuiApplication::quit);
我还尝试使用qcoreapplication::quit()从c++关闭应用程序。qt文档中描述的方法通过信号和插槽调用插槽qguiapplication::quit。
问题是应用程序关闭时出现错误:
"程序意外结束。""进程被强制结束。"
如果我用一个标准的十字架关闭应用程序,那么问题就不会出现。
我怀疑问题出在QQmlApplicationEngine上。因为如果我把engine.load(url);则应用程序正确关闭。
我使用QT 5.13.0最小GW和QT 5.13.0 MSVC2017(32和64)。
如果我在调试中运行,应用程序会给出一个错误,但这个错误绝对没有提供任何信息。
下面是我应用程序代码c++:
#include <QGuiApplication>
#include <QTimer>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
engine.load(url);
QTimer* timer=new QTimer();
QObject::connect(timer, &QTimer::timeout, &app, &QGuiApplication::quit, Qt::QueuedConnection);
timer->start(2000);
return app.exec();
}
和代码qml文件:
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
}
更新:
我试着编译Qt5.9.9 Qt5.13.0 QT5.15,这个问题到处都是。但是当我用Qt6.4版本编译时,这个问题消失了,应用程序正确地终止了。不管怎样,我会把这个问题留着讨论。
1条答案
按热度按时间mfuanj7w1#
正如JarMan指出的,QTimer::singleShot()可以用来关闭应用程序,实际上,这是直接从文档www.example.com中提供的示例https://doc.qt.io/qt-6/qtimer.html#singleShot: