Degug: QmlApplicationEngine failed to load component
2453 ワード
c++クラスをqml利用可能に登録したときにこの問題に遭遇しました.
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
qmlRegisterType
("Serial", 1, 0, "serialhandler");
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
qmlRegisterTypeは、C++実装クラスをQMLで呼び出すことができ、C++とQMLを接続するツールです.
まずはQtAssistantの紹介を見てみましょう
int qmlRegisterType(const char * uri, int versionMajor, int versionMinor, const char * qmlName)
This template function registers the C++ type in the QML system with the name qmlName, in the library imported from uri having the version number composed from versionMajor and versionMinor.
QmlRegisterTypeには4つのパラメータが表示され、1番目のパラメータ*uriはQMLのimport後の内容を指し、ヘッダファイル名に相当し、2番目の3番目のパラメータはそれぞれプライマリ・セカンダリ・バージョン番号、4番目のパラメータはQMLのクラス名を指す.
この一言を見てqmlRegisterType
("Serial", 1, 0, "serialhandler");
四番目のQMLのクラス名の頭文字は必ず大文字にしなければなりません!!!qmlRegisterType
("Serial", 1, 0, "Serialhandler"); // , ~。~
.qml参照import Serial 1.0