[Development] More Issues with QMetaObjectBuilder
Phil Thompson
phil at riverbankcomputing.com
Mon Oct 21 12:02:47 CEST 2024
Hi,
I've come across another issue when using QMetaObjectBuilder
specifically related to creating properties that have a flags type.
When Q_PROPERTY is used to define a property with type (for example)
Qt::Alignment the name of the type stored in the meta-object is
"Qt::Alignment".
When QMetaObjectBuilder.addProperty() is used it will instead use the
name of the meta-type (ie. "QFlags<Qt::AlignmentFlag>") which it has
obtained from QMetaType::fromName("Qt::Alignment").name().
In the QMetaProperty ctor it tries to resolve the QMetaEnum for the
property and uses the internal parse_scope() to extract the scope and
qualified key from the name. However it does not handle template names
and so fails with dynamically created properties.
One solution would be for addProperty() to always use the type name it
was given rather than use QMetaType::fromName(). That has the advantage
that the layout of the dynamic meta-object would match that generated by
moc.
Another solution would be to change parse_scope() to first strip out any
"QFlags<" and ">".
Thanks,
Phil
More information about the Development
mailing list