Solved Error bei Unittest unverständlich "QJSEngine: Must construct a QCoreApplication before a QJSEngine"
-
Hallo zusammen,
ich bin dabei einen Unittest zu schreiben.
bei die beiden Zeile:QQmlEngine engine; engine.addImportPath("qrc:/");
QJSEngine: Must construct a QCoreApplication before a QJSEngine
und folgenden Warnungen:
QCoreApplication::applicationDirPath: Please instantiate the QApplication object first
QEventLoop: Cannot be used without QApplicationIch verstehe nicht was ist dann falsch?
Danke in voraus
-
@Galilio Du brauchst eine Instanz von QCoreApplication:
QCoreApplication(...); QQmlEngine engine; engine.addImportPath("qrc:/");
-
Kannst du bir mir sagen warum es unbedingt einen Instanz notwendig
Danke
-
@Galilio Q(Core)Application ist der Motor jedes Qt Programms. So wie ein Auto ohne Motor nicht fährt, kann ein Qt-Programm ohne QCoreApplication nicht funktionieren.
Grüße
-
@Galilio Hier findest du die Info: https://doc.qt.io/qt-5/qcoreapplication.html
Das ist auch lesenswert: https://wiki.qt.io/Threads_Events_QObjects -
Hallo,
danke für die Antwort.
Ich bin dabei einen QML Unittest zu schreiben und habe gedacht, dass ich den QCoreApplicaton gar nicht brauche und weiss ich ehrlich gesagt woher soll ich die überhaupt instanziere.Es handelt sich um einen Qt Quick Application .
-
@Galilio
Konkreter gefragt: Mein Ziel wäre einen Unit test für einen QML Datei zu schreiben.
folgende habe ich gemacht:
1)Das QML Datei (Der zu testen ist)
2)tst_QML datei (Wo die State und die Geometrie festgelegt sind)
3)Das Unittest (mit dem ich gerade bin), der so aussieht:class CPP_QML_Name :public QObject { Q_OBJECT ... private slots: void initTestCase(); void test_case1(); .... }; .....// Die Implementierung void CPP_QML_Name initTestCase() { QQmlEngine engine; engine.addImportPath("qrc:/"); QQmlComponent component(&engine); component.loadUrl(QUrl("qrc:/tst_QQtQMLTestFileName.qml")); QVERIFY(component.isReady()); ... // Bis hier was ist dan falsch? } QTEST_APPLESS_MAIN(CPP_QML_Name) #include "CPP_QML_Name.moc"
Ich benutze übrigen Qt Version 5.9.1
Danke
-
@Galilio said in Error bei Unittest unverständlich "QJSEngine: Must construct a QCoreApplication before a QJSEngine":
QTEST_APPLESS_MAIN
Ersetze das durch QTEST_MAIN und es wird alles funktionieren.
-
@Galilio Deine Test-App ist keine reine QML app, sie ist eine C++ application, die Klassen benutzt, welche eine Event-Loop erfordern.
Benutze https://doc.qt.io/qt-5/qtest.html#QTEST_MAIN statt QTEST_APPLESS_MAIN.
QTestMain erstellt eine QApplication Instanz. -
Aber "QTEST_MAIN " ist in Qt Version 5.9.1 nicht vorhanden
-
@Galilio said in Error bei Unittest unverständlich "QJSEngine: Must construct a QCoreApplication before a QJSEngine":
Aber "QTEST_MAIN " ist in Qt Version 5.9.1 nicht vorhanden
-
Vielen dank