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

时间:2018-08-12 15:44:16

标签: c++ qt qml

根据Qt qml类型文档

  

quit()

     

此函数导致发出 QQmlEngine :: quit()信号。在使用qmlscene进行原型制作时,这会导致启动器   申请退出;当此方法退出时,退出C ++应用程序   调用,将 QQmlEngine :: quit()信号连接到    QCoreApplication :: quit()插槽。

所以要退出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()}

}

1 个答案:

答案 0 :(得分:2)

您必须学习使用new connection syntax in Qt,具体情况如下:

use App\Post;

更新:

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

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