diff options
| author | Ulf Hermann <[email protected]> | 2024-05-14 09:40:43 +0200 |
|---|---|---|
| committer | Ulf Hermann <[email protected]> | 2024-05-23 16:29:16 +0200 |
| commit | 548f7ad9c2783cdda45b5f31eb517850c6419eea (patch) | |
| tree | 67071e41fa1cf0866e567b708c03618038fc4b15 | |
| parent | 5430aeadd88b35c81c08ec96e91206e07346866c (diff) | |
Add invokable default ctors to all named, structured value types
This way you can create them using new and populate them manually
(provided you have a way of obtaining type references to them).
Task-number: QTBUG-124662
Change-Id: Icceacaefafc311044d519e4af011b078dbf2f1e7
Reviewed-by: Olivier De Cannière <[email protected]>
Reviewed-by: Fabian Kosmale <[email protected]>
| -rw-r--r-- | src/qml/qml/qqmlvaluetype_p.h | 6 | ||||
| -rw-r--r-- | src/quick/util/qquickvaluetypes_p.h | 8 | ||||
| -rw-r--r-- | tests/auto/qml/qqmlvaluetypes/data/constructors.qml | 14 | ||||
| -rw-r--r-- | tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp | 23 |
4 files changed, 48 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlvaluetype_p.h b/src/qml/qml/qqmlvaluetype_p.h index 8815c914ce..e6728e0706 100644 --- a/src/qml/qml/qqmlvaluetype_p.h +++ b/src/qml/qml/qqmlvaluetype_p.h @@ -116,7 +116,7 @@ struct Q_QML_EXPORT QQmlPointFValueType QML_STRUCTURED_VALUE public: - QQmlPointFValueType() = default; + Q_INVOKABLE QQmlPointFValueType() = default; Q_INVOKABLE QQmlPointFValueType(const QPoint &point) : v(point) {} Q_INVOKABLE QString toString() const; qreal x() const; @@ -164,7 +164,7 @@ struct Q_QML_EXPORT QQmlSizeFValueType QML_STRUCTURED_VALUE public: - QQmlSizeFValueType() = default; + Q_INVOKABLE QQmlSizeFValueType() = default; Q_INVOKABLE QQmlSizeFValueType(const QSize &size) : v(size) {} Q_INVOKABLE QString toString() const; qreal width() const; @@ -218,7 +218,7 @@ struct Q_QML_EXPORT QQmlRectFValueType QML_STRUCTURED_VALUE public: - QQmlRectFValueType() = default; + Q_INVOKABLE QQmlRectFValueType() = default; Q_INVOKABLE QQmlRectFValueType(const QRect &rect) : v(rect) {} Q_INVOKABLE QString toString() const; qreal x() const; diff --git a/src/quick/util/qquickvaluetypes_p.h b/src/quick/util/qquickvaluetypes_p.h index 5451675a01..e49d3daed8 100644 --- a/src/quick/util/qquickvaluetypes_p.h +++ b/src/quick/util/qquickvaluetypes_p.h @@ -54,6 +54,7 @@ class Q_QUICK_EXPORT QQuickColorValueType public: static QVariant create(const QJSValue ¶ms); + Q_INVOKABLE QQuickColorValueType() = default; Q_INVOKABLE QQuickColorValueType(const QString &string); Q_INVOKABLE QString toString() const; @@ -102,6 +103,7 @@ class Q_QUICK_EXPORT QQuickVector2DValueType public: static QVariant create(const QJSValue ¶ms); + Q_INVOKABLE QQuickVector2DValueType() = default; Q_INVOKABLE QString toString() const; qreal x() const; @@ -140,6 +142,7 @@ class Q_QUICK_EXPORT QQuickVector3DValueType public: static QVariant create(const QJSValue ¶ms); + Q_INVOKABLE QQuickVector3DValueType() = default; Q_INVOKABLE QString toString() const; qreal x() const; @@ -183,6 +186,7 @@ class Q_QUICK_EXPORT QQuickVector4DValueType public: static QVariant create(const QJSValue ¶ms); + Q_INVOKABLE QQuickVector4DValueType() = default; Q_INVOKABLE QString toString() const; qreal x() const; @@ -227,6 +231,7 @@ class Q_QUICK_EXPORT QQuickQuaternionValueType public: static QVariant create(const QJSValue ¶ms); + Q_INVOKABLE QQuickQuaternionValueType() = default; Q_INVOKABLE QString toString() const; qreal scalar() const; @@ -288,6 +293,8 @@ class Q_QUICK_EXPORT QQuickMatrix4x4ValueType public: static QVariant create(const QJSValue ¶ms); + Q_INVOKABLE QQuickMatrix4x4ValueType() = default; + qreal m11() const { return v(0, 0); } qreal m12() const { return v(0, 1); } qreal m13() const { return v(0, 2); } @@ -441,6 +448,7 @@ class Q_QUICK_EXPORT QQuickFontValueType public: static QVariant create(const QJSValue &value); + Q_INVOKABLE QQuickFontValueType() = default; Q_INVOKABLE QString toString() const; QString family() const; diff --git a/tests/auto/qml/qqmlvaluetypes/data/constructors.qml b/tests/auto/qml/qqmlvaluetypes/data/constructors.qml new file mode 100644 index 0000000000..d94d6d8ad4 --- /dev/null +++ b/tests/auto/qml/qqmlvaluetypes/data/constructors.qml @@ -0,0 +1,14 @@ +import QtQuick as Q + +Q.QtObject { + property var point: new Q.point() + property var size: new Q.size() + property var rect: new Q.rect() + property var color: new Q.color() + property var vector2d: new Q.vector2d() + property var vector3d: new Q.vector3d() + property var vector4d: new Q.vector4d() + property var quaternion: new Q.quaternion() + property var matrix4x4: new Q.matrix4x4() + property var font: new Q.font() +} diff --git a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp index 2634044238..ea521053ae 100644 --- a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp +++ b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp @@ -78,6 +78,7 @@ private slots: void writeBackOnFunctionCall(); void valueTypeConversions(); void readReferenceOnGetOwnProperty(); + void constructors(); private: QQmlEngine engine; @@ -1832,6 +1833,28 @@ void tst_qqmlvaluetypes::readReferenceOnGetOwnProperty() QVERIFY(o->property("allo").toBool()); } +void tst_qqmlvaluetypes::constructors() +{ + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("constructors.qml")); + QVERIFY2(c.isReady(), qPrintable(c.errorString())); + + QScopedPointer<QObject> o(c.create()); + QVERIFY(!o.isNull()); + + QCOMPARE(o->property("point"), QVariant(QPointF())); + QCOMPARE(o->property("size"), QVariant(QSizeF())); + QCOMPARE(o->property("rect"), QVariant(QRectF())); + QCOMPARE(o->property("color"), QVariant(QColor())); + QCOMPARE(o->property("vector2d"), QVariant(QVector2D())); + QCOMPARE(o->property("vector3d"), QVariant(QVector3D())); + QCOMPARE(o->property("vector4d"), QVariant(QVector4D())); + QCOMPARE(o->property("quaternion"), QVariant(QQuaternion())); + QCOMPARE(o->property("matrix4x4"), QVariant(QMatrix4x4())); + QCOMPARE(o->property("font"), QVariant(QFont())); + +} + #undef CHECK_TYPE_IS_NOT_VALUETYPE QTEST_MAIN(tst_qqmlvaluetypes) |
