qmltc: Add READ before WRITE in generated Q_PROPERTYs

We currently have two orderings for the READ and WRITE elements of the
macro depending on whether we compile a property or an alias. Make them
uniform by having READ before WRITE in both cases.

Change-Id: I1dd308c921b8948347029c603bc3bca2be87abda
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Olivier De Cannière 2024-11-28 15:35:18 +01:00
parent 86e4eecb6a
commit 405fb70437
2 changed files with 10 additions and 10 deletions

View File

@ -19,7 +19,7 @@ class HelloWorld : public QObject
{ {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
Q_PROPERTY(QString hello WRITE setHello READ hello BINDABLE bindableHello) Q_PROPERTY(QString hello READ hello WRITE setHello BINDABLE bindableHello)
public: public:
HelloWorld(QQmlEngine* engine, QObject* parent = nullptr, [[maybe_unused]] qxp::function_ref<void(PropertyInitializer&)> initializer = [](PropertyInitializer&){}); HelloWorld(QQmlEngine* engine, QObject* parent = nullptr, [[maybe_unused]] qxp::function_ref<void(PropertyInitializer&)> initializer = [](PropertyInitializer&){});
@ -28,8 +28,8 @@ Q_SIGNALS:
void created(); void created();
public: public:
void setHello(const QString& hello_);
QString hello(); QString hello();
void setHello(const QString& hello_);
QBindable<QString> bindableHello(); QBindable<QString> bindableHello();
Q_INVOKABLE void printHello(passByConstRefOrValue<QString> prefix, passByConstRefOrValue<QString> suffix); Q_INVOKABLE void printHello(passByConstRefOrValue<QString> prefix, passByConstRefOrValue<QString> suffix);

View File

@ -887,6 +887,14 @@ void QmltcCompiler::compileProperty(QmltcType &current, const QQmlJSMetaProperty
// 1. add setter and getter // 1. add setter and getter
// If p.isList(), it's a QQmlListProperty. Then you can write the underlying list through // If p.isList(), it's a QQmlListProperty. Then you can write the underlying list through
// the QQmlListProperty object retrieved with the getter. Setting it would make no sense. // the QQmlListProperty object retrieved with the getter. Setting it would make no sense.
QmltcMethod getter{};
getter.returnType = underlyingType;
getter.name = compilationData.read;
getter.body << u"return " + variableName + u".value();";
getter.userVisible = true;
current.functions.emplaceBack(getter);
mocPieces << u"READ"_s << getter.name;
if (p.isWritable() && !qIsReferenceTypeList(p)) { if (p.isWritable() && !qIsReferenceTypeList(p)) {
QmltcMethod setter {}; QmltcMethod setter {};
setter.returnType = u"void"_s; setter.returnType = u"void"_s;
@ -901,14 +909,6 @@ void QmltcCompiler::compileProperty(QmltcType &current, const QQmlJSMetaProperty
mocPieces << u"WRITE"_s << setter.name; mocPieces << u"WRITE"_s << setter.name;
} }
QmltcMethod getter {};
getter.returnType = underlyingType;
getter.name = compilationData.read;
getter.body << u"return " + variableName + u".value();";
getter.userVisible = true;
current.functions.emplaceBack(getter);
mocPieces << u"READ"_s << getter.name;
// 2. add bindable // 2. add bindable
if (!qIsReferenceTypeList(p)) { if (!qIsReferenceTypeList(p)) {
QmltcMethod bindable {}; QmltcMethod bindable {};