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