aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <[email protected]>2024-05-14 09:40:43 +0200
committerUlf Hermann <[email protected]>2024-05-23 16:29:16 +0200
commit548f7ad9c2783cdda45b5f31eb517850c6419eea (patch)
tree67071e41fa1cf0866e567b708c03618038fc4b15
parent5430aeadd88b35c81c08ec96e91206e07346866c (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.h6
-rw-r--r--src/quick/util/qquickvaluetypes_p.h8
-rw-r--r--tests/auto/qml/qqmlvaluetypes/data/constructors.qml14
-rw-r--r--tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp23
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 &params);
+ 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 &params);
+ 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 &params);
+ 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 &params);
+ 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 &params);
+ 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 &params);
+ 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)