Qt World Summit: Register Today!

Statically built plugin could not load by engine on qmldir declare in Qt 5.8 rc

  • Briefly speaking, lets see a code snippet:

    I build a plugin named MyQMLPlugin statically, and import MyQMLPlugin in main.qml using the following statement:


    What if the QML environment recognize my imported types? This is a question, in my approach, I do the following:

    #define QUICK_MODULE_INTIALIZE( PLUGIN, engine, uri ) \
        qobject_cast<QQmlExtensionPlugin*>( qt_static_plugin_##PLUGIN().instance( ) ) \
        ->registerTypes( uri ); \
        qobject_cast<QQmlExtensionPlugin*>( qt_static_plugin_##PLUGIN().instance( ) ) \
        ->initializeEngine( engine, uri );
    QUICK_MODULE_INTIALIZE( MyQMLPlugin, engine, "QtDream.MyQML" );

    All that be done within main() function after QApplication construction before QQmlApplicationEngine's construction.

    Next, is qmldir still necessary? A question left it for everyone, but I import the qmldir in resource path instead of an file path.
    In qmldir file, I write:

    module QtDream.MyQML
    plugin MyQMLPlugin
    classname MyQMLPlugin
    typeinfo MyQMLPlugin.qmltypes

    There is an inconsistency between Qt 5.7.1 and Qt 5.8.0-rc: as there is no so/dll/dylib file in filesystem named "MyQMLPlugin", The engine fails to find with a error: module "QtDream.MyQML" plugin "MyQMLPlugin" not found, which is absurd because MyQMLPlugin class is imported previousely, before QQmlApplicationEngine's construction. in Qt 5.7.1 it does not produce this error, only ignore the plugin MyQMLPlugin statement.

    My question is, is it a bug in Qt 5.8.0-rc or by intention? if is it by intention, how could I do with it elegantly?

  • Moderators

    did you read this?

  • @raven-worx Yes, I've read. Finally, I come up with a a hack to resolve this problem.

Log in to reply