Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmlvaluetype_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQMLVALUETYPE_P_H
5#define QQMLVALUETYPE_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtQml/private/qqmlproperty_p.h>
19
20#include <private/qqmlnullablevalue_p.h>
21#include <private/qmetatype_p.h>
22#include <private/qv4referenceobject_p.h>
23
24#include <QtCore/qobject.h>
25#include <QtCore/qrect.h>
26#if QT_CONFIG(easingcurve)
27#include <QtCore/qeasingcurve.h>
28#endif
29#include <QtCore/qvariant.h>
30
32
33class Q_QML_EXPORT QQmlValueType : public QDynamicMetaObjectData
34{
35public:
36 QQmlValueType() = default;
37 QQmlValueType(QMetaType type, const QMetaObject *staticMetaObject)
38 : m_metaType(type), m_staticMetaObject(staticMetaObject)
39 {}
40 ~QQmlValueType();
41
42 void *create() const { return m_metaType.create(); }
43 void destroy(void *gadgetPtr) const { m_metaType.destroy(gadgetPtr); }
44
45 void construct(void *gadgetPtr, const void *copy) const { m_metaType.construct(gadgetPtr, copy); }
46 void destruct(void *gadgetPtr) const { m_metaType.destruct(gadgetPtr); }
47
48 QMetaType metaType() const { return m_metaType; }
49 const QMetaObject *staticMetaObject() const { return m_staticMetaObject; }
50
51 // ---- dynamic meta object data interface
52 QMetaObject *toDynamicMetaObject(QObject *) override;
53 void objectDestroyed(QObject *) override;
54 int metaCall(QObject *obj, QMetaObject::Call type, int _id, void **argv) override;
55 // ----
56
57private:
58 QMetaType m_metaType;
59 const QMetaObject *m_staticMetaObject = nullptr;
60 QMetaObject *m_dynamicMetaObject = nullptr;
61};
62
63class Q_QML_EXPORT QQmlGadgetPtrWrapper : public QObject
64{
65 Q_OBJECT
66public:
67 static QQmlGadgetPtrWrapper *instance(QQmlEngine *engine, QMetaType type);
68
69 QQmlGadgetPtrWrapper(QQmlValueType *valueType, QObject *parent = nullptr);
70 ~QQmlGadgetPtrWrapper();
71
72 void read(QObject *obj, int idx);
73 void write(QObject *obj, int idx, QQmlPropertyData::WriteFlags flags,
74 int internalIndex = QV4::ReferenceObject::AllProperties) const;
75 QVariant value() const;
76 void setValue(const QVariant &value);
77
78 QMetaType metaType() const { return valueType()->metaType(); }
79 int metaCall(QMetaObject::Call type, int id, void **argv);
80
81 QMetaProperty property(int index) const
82 {
83 return valueType()->staticMetaObject()->property(index);
84 }
85
86 QVariant readOnGadget(const QMetaProperty &property) const
87 {
88 return property.readOnGadget(m_gadgetPtr);
89 }
90
91 void writeOnGadget(const QMetaProperty &property, const QVariant &value)
92 {
93 property.writeOnGadget(m_gadgetPtr, value);
94 }
95
96 void writeOnGadget(const QMetaProperty &property, QVariant &&value)
97 {
98 property.writeOnGadget(m_gadgetPtr, std::move(value));
99 }
100
101private:
102 const QQmlValueType *valueType() const;
103 void *m_gadgetPtr = nullptr;
104};
105
106struct Q_QML_EXPORT QQmlPointFValueType
107{
108 QPointF v;
109 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
110 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
111 Q_GADGET
112 QML_VALUE_TYPE(point)
113 QML_FOREIGN(QPointF)
114 QML_EXTENDED(QQmlPointFValueType)
115 QML_STRUCTURED_VALUE
116
117public:
118 Q_INVOKABLE QQmlPointFValueType() = default;
119 Q_INVOKABLE QQmlPointFValueType(const QPoint &point) : v(point) {}
120 Q_INVOKABLE QString toString() const;
121 qreal x() const;
122 qreal y() const;
123 void setX(qreal);
124 void setY(qreal);
125
126 operator QPointF() const { return v; }
127};
128
129struct Q_QML_EXPORT QQmlPointValueType
130{
131 QPoint v;
132 Q_PROPERTY(int x READ x WRITE setX FINAL)
133 Q_PROPERTY(int y READ y WRITE setY FINAL)
134 Q_GADGET
135 QML_ANONYMOUS
136 QML_FOREIGN(QPoint)
137 QML_EXTENDED(QQmlPointValueType)
138 QML_STRUCTURED_VALUE
139
140public:
141 QQmlPointValueType() = default;
142 Q_INVOKABLE QQmlPointValueType(const QPointF &point) : v(point.toPoint()) {}
143 Q_INVOKABLE QString toString() const;
144 int x() const;
145 int y() const;
146 void setX(int);
147 void setY(int);
148
149 operator QPoint() const { return v; }
150};
151
152struct Q_QML_EXPORT QQmlSizeFValueType
153{
154 QSizeF v;
155 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
156 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
157 Q_GADGET
158 QML_VALUE_TYPE(size)
159 QML_FOREIGN(QSizeF)
160 QML_EXTENDED(QQmlSizeFValueType)
161 QML_STRUCTURED_VALUE
162
163public:
164 Q_INVOKABLE QQmlSizeFValueType() = default;
165 Q_INVOKABLE QQmlSizeFValueType(const QSize &size) : v(size) {}
166 Q_INVOKABLE QString toString() const;
167 qreal width() const;
168 qreal height() const;
169 void setWidth(qreal);
170 void setHeight(qreal);
171
172 operator QSizeF() const { return v; }
173};
174
175struct Q_QML_EXPORT QQmlSizeValueType
176{
177 QSize v;
178 Q_PROPERTY(int width READ width WRITE setWidth FINAL)
179 Q_PROPERTY(int height READ height WRITE setHeight FINAL)
180 Q_GADGET
181 QML_ANONYMOUS
182 QML_FOREIGN(QSize)
183 QML_EXTENDED(QQmlSizeValueType)
184 QML_STRUCTURED_VALUE
185
186public:
187 QQmlSizeValueType() = default;
188 Q_INVOKABLE QQmlSizeValueType(const QSizeF &size) : v(size.toSize()) {}
189 Q_INVOKABLE QString toString() const;
190 int width() const;
191 int height() const;
192 void setWidth(int);
193 void setHeight(int);
194
195 operator QSize() const { return v; }
196};
197
198struct Q_QML_EXPORT QQmlRectFValueType
199{
200 QRectF v;
201 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
202 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
203 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
204 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
205 Q_PROPERTY(qreal left READ left DESIGNABLE false FINAL)
206 Q_PROPERTY(qreal right READ right DESIGNABLE false FINAL)
207 Q_PROPERTY(qreal top READ top DESIGNABLE false FINAL)
208 Q_PROPERTY(qreal bottom READ bottom DESIGNABLE false FINAL)
209 Q_GADGET
210 QML_VALUE_TYPE(rect)
211 QML_FOREIGN(QRectF)
212 QML_EXTENDED(QQmlRectFValueType)
213 QML_STRUCTURED_VALUE
214
215public:
216 Q_INVOKABLE QQmlRectFValueType() = default;
217 Q_INVOKABLE QQmlRectFValueType(const QRect &rect) : v(rect) {}
218 Q_INVOKABLE QString toString() const;
219 qreal x() const;
220 qreal y() const;
221 void setX(qreal);
222 void setY(qreal);
223
224 qreal width() const;
225 qreal height() const;
226 void setWidth(qreal);
227 void setHeight(qreal);
228
229 qreal left() const;
230 qreal right() const;
231 qreal top() const;
232 qreal bottom() const;
233
234 operator QRectF() const { return v; }
235};
236
237struct Q_QML_EXPORT QQmlRectValueType
238{
239 QRect v;
240 Q_PROPERTY(int x READ x WRITE setX FINAL)
241 Q_PROPERTY(int y READ y WRITE setY FINAL)
242 Q_PROPERTY(int width READ width WRITE setWidth FINAL)
243 Q_PROPERTY(int height READ height WRITE setHeight FINAL)
244 Q_PROPERTY(int left READ left DESIGNABLE false FINAL)
245 Q_PROPERTY(int right READ right DESIGNABLE false FINAL)
246 Q_PROPERTY(int top READ top DESIGNABLE false FINAL)
247 Q_PROPERTY(int bottom READ bottom DESIGNABLE false FINAL)
248 Q_GADGET
249 QML_ANONYMOUS
250 QML_FOREIGN(QRect)
251 QML_EXTENDED(QQmlRectValueType)
252 QML_STRUCTURED_VALUE
253
254public:
255 QQmlRectValueType() = default;
256 Q_INVOKABLE QQmlRectValueType(const QRectF &rect) : v(rect.toRect()) {}
257 Q_INVOKABLE QString toString() const;
258 int x() const;
259 int y() const;
260 void setX(int);
261 void setY(int);
262
263 int width() const;
264 int height() const;
265 void setWidth(int);
266 void setHeight(int);
267
268 int left() const;
269 int right() const;
270 int top() const;
271 int bottom() const;
272
273 operator QRect() const { return v; }
274};
275
276#if QT_CONFIG(easingcurve)
277namespace QQmlEasingEnums
278{
279Q_NAMESPACE_EXPORT(Q_QML_EXPORT)
280QML_NAMED_ELEMENT(Easing)
281
282enum Type {
283 Linear = QEasingCurve::Linear,
284 InQuad = QEasingCurve::InQuad, OutQuad = QEasingCurve::OutQuad,
285 InOutQuad = QEasingCurve::InOutQuad, OutInQuad = QEasingCurve::OutInQuad,
286 InCubic = QEasingCurve::InCubic, OutCubic = QEasingCurve::OutCubic,
287 InOutCubic = QEasingCurve::InOutCubic, OutInCubic = QEasingCurve::OutInCubic,
288 InQuart = QEasingCurve::InQuart, OutQuart = QEasingCurve::OutQuart,
289 InOutQuart = QEasingCurve::InOutQuart, OutInQuart = QEasingCurve::OutInQuart,
290 InQuint = QEasingCurve::InQuint, OutQuint = QEasingCurve::OutQuint,
291 InOutQuint = QEasingCurve::InOutQuint, OutInQuint = QEasingCurve::OutInQuint,
292 InSine = QEasingCurve::InSine, OutSine = QEasingCurve::OutSine,
293 InOutSine = QEasingCurve::InOutSine, OutInSine = QEasingCurve::OutInSine,
294 InExpo = QEasingCurve::InExpo, OutExpo = QEasingCurve::OutExpo,
295 InOutExpo = QEasingCurve::InOutExpo, OutInExpo = QEasingCurve::OutInExpo,
296 InCirc = QEasingCurve::InCirc, OutCirc = QEasingCurve::OutCirc,
297 InOutCirc = QEasingCurve::InOutCirc, OutInCirc = QEasingCurve::OutInCirc,
298 InElastic = QEasingCurve::InElastic, OutElastic = QEasingCurve::OutElastic,
299 InOutElastic = QEasingCurve::InOutElastic, OutInElastic = QEasingCurve::OutInElastic,
300 InBack = QEasingCurve::InBack, OutBack = QEasingCurve::OutBack,
301 InOutBack = QEasingCurve::InOutBack, OutInBack = QEasingCurve::OutInBack,
302 InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
303 InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
304 InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
305 SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve,
306 BezierSpline = QEasingCurve::BezierSpline,
307
308 Bezier = BezierSpline // Evil! Don't use this!
309};
310Q_ENUM_NS(Type)
311};
312
313struct Q_QML_EXPORT QQmlEasingValueType
314{
315 QEasingCurve v;
316 Q_GADGET
317 QML_ANONYMOUS
318 QML_FOREIGN(QEasingCurve)
319 QML_EXTENDED(QQmlEasingValueType)
320 QML_STRUCTURED_VALUE
321
322 Q_PROPERTY(QQmlEasingEnums::Type type READ type WRITE setType FINAL)
323 Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude FINAL)
324 Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot FINAL)
325 Q_PROPERTY(qreal period READ period WRITE setPeriod FINAL)
326 Q_PROPERTY(QVariantList bezierCurve READ bezierCurve WRITE setBezierCurve FINAL)
327
328public:
329 QQmlEasingEnums::Type type() const;
330 qreal amplitude() const;
331 qreal overshoot() const;
332 qreal period() const;
333 void setType(QQmlEasingEnums::Type);
334 void setAmplitude(qreal);
335 void setOvershoot(qreal);
336 void setPeriod(qreal);
337 void setBezierCurve(const QVariantList &);
338 QVariantList bezierCurve() const;
339
340 operator QEasingCurve() const { return v; }
341};
342#endif
343
351
352QT_END_NAMESPACE
353
354#endif // QQMLVALUETYPE_P_H
Combined button and popup list for selecting options.