qtqmlタイプのドキュメントによると
終了する()
この関数により、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()}
}
Qtの新しい接続構文 の使用法を学ぶ必要があります。あなたの場合は次のとおりです。
_QObject::connect(&engine, &QQmlApplicationEngine::quit, &QGuiApplication::quit);
_
更新:
2番目のケースの回避策は、 Qt.callLater()
を使用することです。
_ApplicationWindow {
id:root
visible: true
width: 480
height: 640
title: qsTr("Hello World")
Component.onCompleted: {
Qt.callLater(Qt.quit)
}
}
_