我有以下問題: 我編寫了一個qml-GUI和一個接口類,通過在qml端連接C++端的插槽上的信號與一些C++代碼進行通信。基於事件或按鈕的觸發器工作正常,但我需要一個信號,必須在啓動時直接觸發。我通過使用我的ApplicationWindow
中的Component.onCompleted
來嘗試。 Howevery,產生在Component.on完成之前初始化QML信號
輸出 「setInitDrone()被稱爲」,但從未達到
getInitDrone()
。 QT文檔說: 「運行onCompleted處理程序的順序未定義。」
我可以確保信號已經初始化,當我試圖發送它,或者是否有任何其他方法,而不是使用Component.onCompleted?
感謝您的幫助!
main.qml:
ApplicationWindow{
id: appWindow
visible: true
minimumHeight: 800
minimumWidth: 700
visibility: Window.Maximized
signal setInitDrone()
Component.onCompleted: {
setInitDrone()
print("setInitDrone() called")
}
}
qml_cpp_interface.cpp:
void Qml_cpp_interface::getInitDrone(){
qDebug() << "Cpp initDrone received";
flightserver.init();
}
groundstation.cpp:
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
//Connect with C++ code
QObject *item = engine.rootObjects().first();
Qml_cpp_interface qml_cpp_interface;
QObject::connect(item, SIGNAL(setInitDrone()), &qml_cpp_interface,SLOT(getInitDrone()));
return app.exec();