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// Qt-Security score:significant
4
5#ifndef QQMLVALUETYPE_P_H
6#define QQMLVALUETYPE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtQml/private/qqmlproperty_p.h>
20
21#include <private/qqmlnullablevalue_p.h>
22#include <private/qmetatype_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#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
53 const QMetaObject *toDynamicMetaObject(QObject *) const override;
54#else
55 QMetaObject *toDynamicMetaObject(QObject *) override;
56#endif
57 void objectDestroyed(QObject *) override;
58 int metaCall(QObject *obj, QMetaObject::Call type, int _id, void **argv) override;
59 // ----
60
61private:
62 QMetaType m_metaType;
63 const QMetaObject *m_staticMetaObject = nullptr;
64 QT7_ONLY(mutable const)
65 QMetaObject *m_dynamicMetaObject = nullptr;
66};
67
68class Q_QML_EXPORT QQmlGadgetPtrWrapper : public QObject
69{
70 Q_OBJECT
71public:
72 static QQmlGadgetPtrWrapper *instance(QQmlEngine *engine, QMetaType type);
73
74 QQmlGadgetPtrWrapper(QQmlValueType *valueType, QObject *parent = nullptr);
75 ~QQmlGadgetPtrWrapper();
76
77 void read(QObject *obj, int idx);
78 void write(QObject *obj, int idx, QQmlPropertyData::WriteFlags flags, int internalIndex) const;
79 QVariant value() const;
80 void setValue(const QVariant &value);
81
82 QMetaType metaType() const { return valueType()->metaType(); }
83 int metaCall(QMetaObject::Call type, int id, void **argv);
84
85 QMetaProperty property(int index) const
86 {
87 return valueType()->staticMetaObject()->property(index);
88 }
89
90 QVariant readOnGadget(const QMetaProperty &property) const
91 {
92 return property.readOnGadget(m_gadgetPtr);
93 }
94
95 void writeOnGadget(const QMetaProperty &property, const QVariant &value)
96 {
97 property.writeOnGadget(m_gadgetPtr, value);
98 }
99
100 void writeOnGadget(const QMetaProperty &property, QVariant &&value)
101 {
102 property.writeOnGadget(m_gadgetPtr, std::move(value));
103 }
104
105private:
106 const QQmlValueType *valueType() const;
107 void *m_gadgetPtr = nullptr;
108};
109
110struct Q_QML_EXPORT QQmlPointFValueType : private QPointF
111{
112 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
113 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
114 Q_GADGET
115 QML_VALUE_TYPE(point)
116 QML_FOREIGN(QPointF)
117 QML_EXTENDED(QQmlPointFValueType)
118 QML_STRUCTURED_VALUE
119
120public:
121 Q_INVOKABLE QQmlPointFValueType() = default;
122 Q_INVOKABLE QQmlPointFValueType(const QPointF &point) : QPointF(point) {}
123 Q_INVOKABLE QQmlPointFValueType(const QPoint &point) : QPointF(point) {}
124 Q_INVOKABLE QString toString() const;
125 qreal x() const;
126 qreal y() const;
127 void setX(qreal);
128 void setY(qreal);
129};
130
131struct Q_QML_EXPORT QQmlPointValueType : private QPoint
132{
133 Q_PROPERTY(int x READ x WRITE setX FINAL)
134 Q_PROPERTY(int y READ y WRITE setY FINAL)
135 Q_GADGET
136 QML_ANONYMOUS
137 QML_FOREIGN(QPoint)
138 QML_EXTENDED(QQmlPointValueType)
139 QML_STRUCTURED_VALUE
140
141public:
142 QQmlPointValueType() = default;
143 Q_INVOKABLE QQmlPointValueType(const QPoint &point) : QPoint(point) {}
144 Q_INVOKABLE QQmlPointValueType(const QPointF &point) : QPoint(point.toPoint()) {}
145 Q_INVOKABLE QString toString() const;
146 int x() const;
147 int y() const;
148 void setX(int);
149 void setY(int);
150};
151
152struct Q_QML_EXPORT QQmlSizeFValueType : private QSizeF
153{
154 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
155 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
156 Q_GADGET
157 QML_VALUE_TYPE(size)
158 QML_FOREIGN(QSizeF)
159 QML_EXTENDED(QQmlSizeFValueType)
160 QML_STRUCTURED_VALUE
161
162public:
163 Q_INVOKABLE QQmlSizeFValueType() = default;
164 Q_INVOKABLE QQmlSizeFValueType(const QSizeF &size) : QSizeF(size) {}
165 Q_INVOKABLE QQmlSizeFValueType(const QSize &size) : QSizeF(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
173struct Q_QML_EXPORT QQmlSizeValueType : private QSize
174{
175 Q_PROPERTY(int width READ width WRITE setWidth FINAL)
176 Q_PROPERTY(int height READ height WRITE setHeight FINAL)
177 Q_GADGET
178 QML_ANONYMOUS
179 QML_FOREIGN(QSize)
180 QML_EXTENDED(QQmlSizeValueType)
181 QML_STRUCTURED_VALUE
182
183public:
184 QQmlSizeValueType() = default;
185 Q_INVOKABLE QQmlSizeValueType(const QSize &size) : QSize(size) {}
186 Q_INVOKABLE QQmlSizeValueType(const QSizeF &size) : QSize(size.toSize()) {}
187 Q_INVOKABLE QString toString() const;
188 int width() const;
189 int height() const;
190 void setWidth(int);
191 void setHeight(int);
192};
193
194struct Q_QML_EXPORT QQmlRectFValueType : private QRectF
195{
196 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
197 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
198 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
199 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
200 Q_PROPERTY(qreal left READ left DESIGNABLE false FINAL)
201 Q_PROPERTY(qreal right READ right DESIGNABLE false FINAL)
202 Q_PROPERTY(qreal top READ top DESIGNABLE false FINAL)
203 Q_PROPERTY(qreal bottom READ bottom DESIGNABLE false FINAL)
204 Q_GADGET
205 QML_VALUE_TYPE(rect)
206 QML_FOREIGN(QRectF)
207 QML_EXTENDED(QQmlRectFValueType)
208 QML_STRUCTURED_VALUE
209
210public:
211 Q_INVOKABLE QQmlRectFValueType() = default;
212 Q_INVOKABLE QQmlRectFValueType(const QRectF &rect) : QRectF(rect) {}
213 Q_INVOKABLE QQmlRectFValueType(const QRect &rect) : QRectF(rect) {}
214 Q_INVOKABLE QString toString() const;
215 qreal x() const;
216 qreal y() const;
217 void setX(qreal);
218 void setY(qreal);
219
220 qreal width() const;
221 qreal height() const;
222 void setWidth(qreal);
223 void setHeight(qreal);
224
225 qreal left() const;
226 qreal right() const;
227 qreal top() const;
228 qreal bottom() const;
229};
230
231struct Q_QML_EXPORT QQmlRectValueType : private QRect
232{
233 Q_PROPERTY(int x READ x WRITE setX FINAL)
234 Q_PROPERTY(int y READ y WRITE setY FINAL)
235 Q_PROPERTY(int width READ width WRITE setWidth FINAL)
236 Q_PROPERTY(int height READ height WRITE setHeight FINAL)
237 Q_PROPERTY(int left READ left DESIGNABLE false FINAL)
238 Q_PROPERTY(int right READ right DESIGNABLE false FINAL)
239 Q_PROPERTY(int top READ top DESIGNABLE false FINAL)
240 Q_PROPERTY(int bottom READ bottom DESIGNABLE false FINAL)
241 Q_GADGET
242 QML_ANONYMOUS
243 QML_FOREIGN(QRect)
244 QML_EXTENDED(QQmlRectValueType)
245 QML_STRUCTURED_VALUE
246
247public:
248 QQmlRectValueType() = default;
249 Q_INVOKABLE QQmlRectValueType(const QRect &rect) : QRect(rect) {}
250 Q_INVOKABLE QQmlRectValueType(const QRectF &rect) : QRect(rect.toRect()) {}
251 Q_INVOKABLE QString toString() const;
252 int x() const;
253 int y() const;
254 void setX(int);
255 void setY(int);
256
257 int width() const;
258 int height() const;
259 void setWidth(int);
260 void setHeight(int);
261
262 int left() const;
263 int right() const;
264 int top() const;
265 int bottom() const;
266};
267
268struct Q_QML_EXPORT QQmlMarginsFValueType : private QMarginsF
269{
270 Q_PROPERTY(qreal left READ left WRITE setLeft FINAL)
271 Q_PROPERTY(qreal right READ right WRITE setRight FINAL)
272 Q_PROPERTY(qreal top READ top WRITE setTop FINAL)
273 Q_PROPERTY(qreal bottom READ bottom WRITE setBottom FINAL)
274 Q_GADGET
275 QML_ANONYMOUS
276 QML_FOREIGN(QMarginsF)
277 QML_EXTENDED(QQmlMarginsFValueType)
278 QML_STRUCTURED_VALUE
279
280public:
281 QQmlMarginsFValueType() = default;
282 Q_INVOKABLE QQmlMarginsFValueType(const QMarginsF &margins) : QMarginsF(margins) {}
283 Q_INVOKABLE QQmlMarginsFValueType(const QMargins &margins) : QMarginsF(margins) {}
284 Q_INVOKABLE QString toString() const;
285 qreal left() const;
286 qreal right() const;
287 qreal top() const;
288 qreal bottom() const;
289 void setLeft(qreal);
290 void setRight(qreal);
291 void setTop(qreal);
292 void setBottom(qreal);
293};
294
295struct Q_QML_EXPORT QQmlMarginsValueType : private QMargins
296{
297 Q_PROPERTY(int left READ left WRITE setLeft FINAL)
298 Q_PROPERTY(int right READ right WRITE setRight FINAL)
299 Q_PROPERTY(int top READ top WRITE setTop FINAL)
300 Q_PROPERTY(int bottom READ bottom WRITE setBottom FINAL)
301 Q_GADGET
302 QML_ANONYMOUS
303 QML_FOREIGN(QMargins)
304 QML_EXTENDED(QQmlMarginsValueType)
305 QML_STRUCTURED_VALUE
306
307public:
308 QQmlMarginsValueType() = default;
309 Q_INVOKABLE QQmlMarginsValueType(const QMargins &margins) : QMargins(margins) {}
310 Q_INVOKABLE QQmlMarginsValueType(const QMarginsF &margins) : QMargins(margins.toMargins()) {}
311 Q_INVOKABLE QString toString() const;
312 int left() const;
313 int right() const;
314 int top() const;
315 int bottom() const;
316 void setLeft(int);
317 void setRight(int);
318 void setTop(int);
319 void setBottom(int);
320};
321
322#if QT_CONFIG(easingcurve)
323// Easing type that provides enums and convenience valueForProgress function.
324class Q_QML_EXPORT QQmlEasing : public QObject
325{
326 Q_OBJECT
327 QML_NAMED_ELEMENT(Easing)
328 QML_SINGLETON
329
330public:
331 enum Type {
332 Linear = QEasingCurve::Linear,
333 InQuad = QEasingCurve::InQuad, OutQuad = QEasingCurve::OutQuad,
334 InOutQuad = QEasingCurve::InOutQuad, OutInQuad = QEasingCurve::OutInQuad,
335 InCubic = QEasingCurve::InCubic, OutCubic = QEasingCurve::OutCubic,
336 InOutCubic = QEasingCurve::InOutCubic, OutInCubic = QEasingCurve::OutInCubic,
337 InQuart = QEasingCurve::InQuart, OutQuart = QEasingCurve::OutQuart,
338 InOutQuart = QEasingCurve::InOutQuart, OutInQuart = QEasingCurve::OutInQuart,
339 InQuint = QEasingCurve::InQuint, OutQuint = QEasingCurve::OutQuint,
340 InOutQuint = QEasingCurve::InOutQuint, OutInQuint = QEasingCurve::OutInQuint,
341 InSine = QEasingCurve::InSine, OutSine = QEasingCurve::OutSine,
342 InOutSine = QEasingCurve::InOutSine, OutInSine = QEasingCurve::OutInSine,
343 InExpo = QEasingCurve::InExpo, OutExpo = QEasingCurve::OutExpo,
344 InOutExpo = QEasingCurve::InOutExpo, OutInExpo = QEasingCurve::OutInExpo,
345 InCirc = QEasingCurve::InCirc, OutCirc = QEasingCurve::OutCirc,
346 InOutCirc = QEasingCurve::InOutCirc, OutInCirc = QEasingCurve::OutInCirc,
347 InElastic = QEasingCurve::InElastic, OutElastic = QEasingCurve::OutElastic,
348 InOutElastic = QEasingCurve::InOutElastic, OutInElastic = QEasingCurve::OutInElastic,
349 InBack = QEasingCurve::InBack, OutBack = QEasingCurve::OutBack,
350 InOutBack = QEasingCurve::InOutBack, OutInBack = QEasingCurve::OutInBack,
351 InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
352 InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
353 InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
354 SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve,
355 BezierSpline = QEasingCurve::BezierSpline,
356
357 Bezier = BezierSpline // Evil! Don't use this!
358 };
359 Q_ENUM(Type)
360
361 Q_INVOKABLE qreal valueForProgress(QQmlEasing::Type type, qreal progress) const;
362};
363
364struct Q_QML_EXPORT QQmlEasingValueType : private QEasingCurve
365{
366 Q_GADGET
367 QML_VALUE_TYPE(easingCurve)
368 QML_FOREIGN(QEasingCurve)
369 QML_EXTENDED(QQmlEasingValueType)
370 QML_STRUCTURED_VALUE
371
372 Q_PROPERTY(QQmlEasing::Type type READ type WRITE setType FINAL)
373 Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude FINAL)
374 Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot FINAL)
375 Q_PROPERTY(qreal period READ period WRITE setPeriod FINAL)
376 Q_PROPERTY(QList<qreal> bezierCurve READ bezierCurve WRITE setBezierCurve FINAL)
377
378public:
379 Q_INVOKABLE QQmlEasingValueType() = default;
380 Q_INVOKABLE QQmlEasingValueType(QQmlEasing::Type type);
381 Q_INVOKABLE QQmlEasingValueType(const QEasingCurve &easing) : QEasingCurve(easing) {}
382
383 Q_INVOKABLE qreal valueForProgress(qreal progress);
384
385 QQmlEasing::Type type() const;
386 qreal amplitude() const;
387 qreal overshoot() const;
388 qreal period() const;
389 void setType(QQmlEasing::Type);
390 void setAmplitude(qreal);
391 void setOvershoot(qreal);
392 void setPeriod(qreal);
393 void setBezierCurve(const QList<qreal> &);
394 QList<qreal> bezierCurve() const;
395};
396#endif
397
405
406QT_END_NAMESPACE
407
408#endif // QQMLVALUETYPE_P_H
Combined button and popup list for selecting options.