[Development] Changed enum property behaviour in Qt v6.8
Phil Thompson
phil at riverbankcomputing.com
Fri Oct 4 16:42:39 CEST 2024
On 04/10/2024 15:32, Thiago Macieira wrote:
> On Friday 4 October 2024 05:43:38 GMT-7 Phil Thompson via Development
> wrote:
>> For dynamically created meta-objects...
>>
>> - the results were dependent on the version of Qt
>> - QMetaProperty.metaType().isValid() always returned false
>> - QMetaProperty.isEnumType() returned true for v6.7.1 and false for
>> v6.8.0
>
> But how was this constructed? Is it setting the QMP and QME's metatype
> using
> QMetaEnumBuilder::setMetaType and QMetaPropertyBuilder::setMetaType?
> Uh...
> there is no such function for QMPB.
>
>> I was surprised by the result of QMetaProperty.isEnumType() for a
>> moc-generated meta-object without Q_ENUM. The docs suggest this should
>> be true for all enums whether or not Q_ENUM is used.
>
> No, it needs the bit set by moc, so Q_ENUM or Q_FLAG is required. The
> doc may
> be misleading then ("if the property's type is an enumeration value").
>
>> Why does QMetaProperty.metaType().isValid() always return true for
>> moc-generated meta-objects and false for dynamically created
>> meta-objects?
>
> Because meta types for all properties are required since 6.0. There are
> no
> exceptions. Since 6.6, moc also generates the metatypes for all enums
> too.
>
> QMetaObjectBuilder always generates the latest revision of the meta
> object, so
> all features are available... but also all requirements are mandatory.
> Meta
> types for all properties, enums, methods , and for gadgets the gadget
> itself
> must be provided.
>
>> Is there any way to dynamically register an enum with the meta-type
>> system (so that QMetaEnum.metaType().isValid() returns true)?
>
> Sure. And registration is automatic anyway.
>
> All you should need to do is pass the necessary QMetaType
Understood - but there seems to be no obvious way to dynamically create
and register a valid QMetaType.
Phil
More information about the Development
mailing list