[Interest] QQmlExtensionPlugin not loading
Jesper Huijgens
jesper.huijgens at sioux.eu
Fri Mar 9 15:43:29 CET 2018
Hello,
First of all. Thanks for the help so far, got me quite a bit further.
What I try to achieve is having plugins that can inject e.g. a button on
a toolbar. Simply put: an application that can be extended via plugins.
During development I do not know what plugins there will be at runtime.
So I do not know what to import in Main.qml.
All plugins also implement an interface I made with a method /initPlugin/.
In this method the plugin can create a qml object and inject it into the
already running UI (Calling this method is triggered from within the
main UI).
Easiest/simplified example would be:
--------------------
*MyPlugin.cpp*:
void MyPlugin::registerTypes (const char* uri) // uri => "MyPlugin"
{
qmlRegisterType<MyPluginType>(uri, 1, 0, "MyPluginType");
}
void MyPlugin::initPlugin (QObject* objectInsideTheRunningUI)
{
QQmlEngine* engine =
QQmlEngine::contextForObject(objectInsideTheRunningUI)->engine();
auto newButton = createButtonUsingEngine(engine,
"MyPluginButton.qml"); // Method creating QQmlComponent, and calling
QQmlComponent.create() on it
}
*MyPluginButton.qml*:
import QtQuick 2.10
import MyPlugin 1.0 // *Here I get module MyPlugin is not installed.*
Item {
MyPluginType {}
}
--------------------
TL;DR:
If I import my plugin module in Main.qml it works like a charm.
If I dynamically create a qml object which call the same import
call (import MyPlugin 1.0) it does not work. I get module MyPlugin is
not installed.
In tried calling the registerTypes method inside initPlugin. This seems
to work. But I am curious why it works if I call import in Main.qml and
not in MyPluginButton.qml, and what I should do to make it work.
Thanks.
Kind regards,
Jesper
On 09-03-18 14:53, Jesper Huijgens wrote:
> Ok, I see what the problem is.
>
> I expected Qt to automatically register the types. Even without the
> import statement.
>
> --
> Jesper
>
> On 09-03-18 14:44, Martin Leutelt wrote:
>>
>> *From: * Jesper Huijgens <jesper.huijgens at sioux.eu>
>> *To: * <interest at qt-project.org>
>> *Sent: * 3/9/2018 2:24 PM
>> *Subject: * Re: [Interest] QQmlExtensionPlugin not loading
>>
>> With QML_IMPORT_TRACE I see again the right folders. But I do not
>> see any attempt of loading the plugin.
>>
>>
>> You're missing an import statement in your main.qml to load your
>> plugin (see http://doc.qt.io/qt-5/qtqml-modules-cppplugins.html).
>> addPluginPath()/addLibraryPath() isn't necessary for QML plugins, but
>> (depending on your project hierarchy or how your application is
>> installed/deployed) you might need addImportPath().
>>
>>
>>
>> Kind regards,
>> Jesper
>>
>>
>> Regards
>> Martin
>>
>>
>>
>> On 09-03-18 14:20, Martin Leutelt wrote:
>>>
>>> *From: * Jesper Huijgens <jesper.huijgens at sioux.eu>
>>> <mailto:jesper.huijgens at sioux.eu>
>>> *To: * <interest at qt-project.org> <mailto:interest at qt-project.org>
>>> *Sent: * 3/9/2018 2:04 PM
>>> *Subject: * [Interest] QQmlExtensionPlugin not loading
>>>
>>> Hi all,
>>>
>>> For our project we see that QQmlExtensionPlugins are not
>>> loaded.
>>> I made a very basic example project that creates a
>>> QQmlExtensionPlugin
>>> and an application that should use. The plugin, with the
>>> corresponding
>>> qmldir, are placed in a plugin subdir in the output
>>> directory of the
>>> application.
>>> The application sets both libraryPath and pluginPath. I
>>> output the
>>> pluginPathList(), I see what I think are the correct folders
>>> on the
>>> debug output.
>>>
>>> I placed a qDebug() in registerTypes of the plugin. I see
>>> nothing on the
>>> debug output.
>>>
>>> Setting QT_DEBUG_PLUGINS to 1 show me a lot of libraries
>>> being loaded.
>>> But not my plugin.
>>>
>>>
>>> Try QML_IMPORT_TRACE instead, since QT_DEBUG_PLUGINS is for
>>> debugging plugins for Qt itself, not the QML engine.
>>>
>>> I work on KDE Neon with g++ 5.4.0, CMake 3.10.0 and Qt 5.10.
>>>
>>> Kind regards,
>>> Jesper
>>>
>>>
>>>
>>> Regards
>>> Martin
>>>
>>>
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>
>>>
>>>
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>>
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>>
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20180309/e061c396/attachment.html>
More information about the Interest
mailing list