Most of the context would be injected into the QML runtime from C++ via calls to `setContextProperty()`, as well as by defining additional QML modules from C++ (via `qmlRegister...()`).

This is where your architecture fails. By using setContextProperty() and procedurally registering types, you

a, still make your types depend on the context (due to context properties). You still won't be able to use them in standalone tools.

b, prevent QML tooling such as qmllint, qmlcachegen, qmlls to do anything useful with your QML code since they cannot see through your procedural type registrations or your context properties.

Instead of this:

1. Use singletons or object properties instead of context properties. There are also initial properties you can pass to QQmlComponent and QQmlApplicationEngine if that helps.

2. Use QML_ELEMENT and friends as well as qt_add_qml_module in CMake to define your types declaratively so that tooling can see them.

This way you obtain truly re-usable QML modules you can test in isolation. You also won't need to implement your own plugins or fight with the linker since qmltyperegistrar will generate the registration code and the hacky symbol references for you. This is the whole point of qt_add_qml_module. If you don't want qmltyperegistrar to do its work, there is little point in using qt_add_qml_module at all.
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to