gpt4 book ai didi

c++ - 如何在 Qt QML 中退出 C++ 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:36 26 4
gpt4 key购买 nike

根据Qt qml Type文档

quit()

This function causes the QQmlEngine::quit() signal to be emitted. Within the Prototyping with qmlscene, this causes the launcher application to exit; to quit a C++ application when this method is called, connect the QQmlEngine::quit() signal to the QCoreApplication::quit() slot.

所以为了退出 QML 中的 C++ 应用程序,我必须调用它

 Qt.quit()

在 QML 文件中,但这只会退出 QML 引擎,我还需要关闭 C++ 应用程序。

这是我的尝试

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);

QScopedPointer<NFCclass> NFC (new NFCclass);

QQmlApplicationEngine engine;


QObject::connect(engine, QQmlEngine::quit(), app, QCoreApplication::quit());
// here is my attempt at connecting based from what i have understood in the documentation of signal and slots


engine.rootContext()->setContextProperty("NFCclass", NFC.data());
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;

return app.exec();
}

如果你能帮助我,非常感谢:)

我认为这是因为我不知道 QtCore 的对象,这就是为什么该行会抛出错误

============================================= ============================编辑:

eyllanesc 作品给出的答案。

但是当我在完成时执行 Qt.quit() 时它不会退出。虽然它适用于按钮

ApplicationWindow {
id:root
visible: true
width: 480
height: 640
title: qsTr("Hello World")

Component.onCompleted: {
Qt.quit()
}

Button{onClicked: Qt.quit()}

}

最佳答案

你必须学会​​使用 new connection syntax in Qt ,在你的情况下是这样的:

QObject::connect(&engine, &QQmlApplicationEngine::quit, &QGuiApplication::quit);

更新:

第二种情况的解决方法是使用 Qt.callLater()

ApplicationWindow {
id:root
visible: true
width: 480
height: 640
title: qsTr("Hello World")

Component.onCompleted: {
Qt.callLater(Qt.quit)
}
}

关于c++ - 如何在 Qt QML 中退出 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com