[Development] Qt 6.2 QQmlMetaType incompatibility
Uwe Rathmann
Uwe.Rathmann at tigertal.de
Fri Sep 24 10:12:53 CEST 2021
Hi,
when testing the Qt 6.2 rc I noticed that registering custom string
converters with
QQmlMetaType::registerCustomStringConverter() has been dropped.
( Yes, QQmlMetaType is from the private API where no compatibility
policies are made )
Actually I'm not interested in having a custom string converters - I was
using it as a workaround
to be able to create a margin that is made from 4 values ( left, top,
right, bottom ) from a single
value in QML.
Instead of writing:
Box
{
margins
{
left: 10
top : 10
right : 10
bottom: 10
}
}
I would like to have the option to write it that way:
Box
{
margins : 10
}
}
Here is my solution - one I do not like much - but it worked until Qt 6.2:
For some reason neither the Qt metatype system nor the QML engine has
specific support for
QMarginsF - like what is implemented for classes other standard Qt types
like QPointF/QRectF/QSizeF ...
So I derived from QMarginsF and exposed it to QML using Q_GADGET.
See https://github.com/uwerat/qskinny/blob/master/src/common/QskMargins.h
To make the single value assignment possible I added the following:
QQmlMetaType::registerCustomStringConverter( qMetaTypeId<
QskMargins >(),
[]( const QString& s ) { return QVariant::fromValue(
QskMargins( s.toDouble() ) ); } );
Is the a way to accomplish something similar with Qt 6.2 ?
Thanks,
Uwe
More information about the Development
mailing list