[Development] [QML]: Register global enums/flags to QML ?
bogdan at kdab.com
Thu Jul 28 09:54:31 CEST 2016
On joi, 28 iulie 2016 09:22:37 EEST Olivier Goffart wrote:
> On Dienstag, 26. Juli 2016 18:18:48 CEST BogDan Vatra wrote:
> > Hello,
> > I'd like to be able to register some "global" enums/flags to QML. I
> > checked
> > a little bit how Qt does with all the enums from Qt namespace
> > (qnamespace.h) and I end-up in qqmlbuiltinfunctions which does all the
> > "magic" which can't be used by normal developers/libs.
> > Because I think having "global" enums is a very nice feature, I'd like to
> > know if other people and QML maintainers agree with me :).
> > If yes, then want to propose the followings:
> > - add one more Q_OBJECT/Q_GADGET like macro for namespaces
> > (Q_NAMESPACE?),
> > which declares the mandatory "extern const QMetaObject staticMetaObject" (
> > or just "extern const QMetaEnum staticMetaEnum" ? because in principle
> > we'll only be able to declare enums/flags ?) into that namespace. Most
> > probably moc will need some love to properly handle the new Q_magic_macro.
> > If is too much trouble we can use the qnamespace.h hack.
> > - add a helper macro/function to register the namespace enums/flags (i.e.
> > qmlRegisterNamespace or even better qmlRegisterEnums(const QMetaEnum
> > &staticMetaEnum, ....).
> > I think it depends on QML c++11 scoped enums task, because most probably
> > the enums enumerators names will clash.
> Yes, i think a Q_NAMESPACE would be a nice addition in order to allow Q_ENUM
> at namespace scope. We have some example for example in the QSsl
> namespace that has enumerations.
> One issue is that moc need to have a complete view of the namespace as it
> generates the QMetaObject for it, so it should not be possible to have
> Q_ENUM in a other header than the one which have the Q_NAMESPACE keyword.
I created two new taks:
- https://bugreports.qt.io/browse/QTBUG-54981 (moc part)
- https://bugreports.qt.io/browse/QTBUG-54982 (qml part)
More information about the Development