[Development] [QML]: Register global enums/flags to QML ?

BogDan Vatra 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.

Thanks Olivier!

I created two new taks:
 - https://bugreports.qt.io/browse/QTBUG-54981 (moc part)
 - https://bugreports.qt.io/browse/QTBUG-54982 (qml part)

Cheers,
BogDan.




More information about the Development mailing list