Hello :]

My question is essentially something I already asked about on Qt's forums 
sometime in 2018:

https://forum.qt.io/topic/89775/registering-pragma-singleton-libraries-in-custom-plugins

We set the requirements such as:
- project is an application which usues a bunch of my custom QML plugins
- plugins contains custom .qml components, QQuickItem-based components, .js 
'.pragma library' components and all the other necessary stuff
- we want to 'properly' structure QML plugins

Currently, for a plugin called IzLibrary, I do:
- I register all my custom types / components using qmlRegisterType() functions 
in my QQmlExtensionPlugin subclass
- I enable qmlcachegen to precompile QML stuff to binary stuff
- I provide qmldir file with contents to:

// QMLDIR FILE START

module IzLibrary
plugin IzLibraryPlugin
typeinfo IzLibrary.qmltypes
classname QmlPlugin
IzToast 1.0 qrc:///include/IzLibrary/JS/IzToast.js
IzMark 1.0 qrc:///include/IzLibrary/JS/IzMark.js
IzBusy 1.0 qrc:///include/IzLibrary/JS/IzBusy.js
IzObjectCreator 1.0 qrc:///include/IzLibrary/JS/IzObjectCreator.js

// QMLDIR FILE END

- finally, using custom CMake commands, I generate .qmltypes file for syntax 
highlighting for my custom components and deploy all of this to the plugin's 
destination

Now, the problem. I'm not able to preregister my .js .pragam library files 
without 'IzMark 1.0 qrc:///include/IzLibrary/JS/IzMark.js' stuff in qmldir file.
I got this idea from Simon Hausmann, from his comment in this QTBUG:
https://bugreports.qt.io/browse/QTBUG-57074

"The suggested workaround of specifying a qrc path in the qmldir file is indeed 
one perfectly fine way of solving this.
Another option - the path chosen by QtQuick Controls - is to not list all of 
the components in the qmldir file but rather register them via 
qmlRegisterType() API calls in the plugin's initialization - then using a qrc 
path as well."

Which is working fine currently but, as described by Ulf Hermann, is considered 
bad practice and actually generates warnings when loading such plugins:
https://bugreports.qt.io/browse/QTBUG-76955

Adding line:

qmlRegisterType(QUrl(QStringLiteral("qrc:/include/IzLibrary/JS/IzBusy.js")), 
uri, 1, 0, "IzBusy");

crashes qmlplugindump during .qmltypes file generation and running my 
application with such a plugin crashes it also.
So my questions are. Have I missed something silly? Do I have to register .js 
files somewhat differently? Is this is currently possible to do?

Narolewski Jakub
Mentor, guru, bastion of modesty.
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to