【问题标题】:How to quit the C++ application in Qt QML如何在 Qt QML 中退出 C++ 应用程序
【发布时间】:2019-01-19 11:27:14
【问题描述】:

根据 Qt qml Type 文档

退出()

这个函数导致 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 works给出的答案。

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

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

    Component.onCompleted: {
       Qt.quit()
    }

    Button{onClicked: Qt.quit()}

}

【问题讨论】:

  • QQmlApplicationEnginequit 信号已经连接到QCoreApplication::quit()。你不应该自己做。

标签: c++ qt qml


【解决方案1】:

你必须学会​​使用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)
    }
}

【讨论】:

  • 它可以工作,但我有一个问题,它只有在我用按钮绑定它时才有效。我有一个功能,当组件完成时,它会检查设备 ID 是否被授权。果然,当设备 ID 未被授权时,它会转到 qt.quit 但它不会关闭应用程序
  • 现在完美运行!谢谢好先生。您能否简要解释一下为什么会发生这种情况?我很抱歉还不知道这些事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多