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
qqmlbuiltins_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 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 QQMLBUILTINS_H
5#define QQMLBUILTINS_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 <private/qqmlcomponentattached_p.h>
19
20#include <QtQml/qjsvalue.h>
21#include <QtQml/qqmlcomponent.h>
22#include <QtQml/qqmlscriptstring.h>
23
24#include <QtQmlIntegration/qqmlintegration.h>
25
26#include <QtCore/qobject.h>
27#include <QtCore/qglobal.h>
28#include <QtCore/qtmetamacros.h>
29#include <QtCore/qmetaobject.h>
30#include <QtCore/qdatetime.h>
31#include <QtCore/qstring.h>
32#include <QtCore/qurl.h>
33#include <QtCore/qvariantmap.h>
34#include <QtCore/qtypes.h>
35#include <QtCore/qchar.h>
36#include <QtCore/qjsonobject.h>
37#include <QtCore/qjsonvalue.h>
38#include <QtCore/qjsonarray.h>
39
40#include <climits>
41
42#if QT_CONFIG(regularexpression)
43#include <QtCore/qregularexpression.h>
44#endif
45
46QT_BEGIN_NAMESPACE
47
48// moc doesn't do 64bit constants, so we have to determine the size of qsizetype indirectly.
49// We assume that qsizetype is always the same size as a pointer. I haven't seen a platform
50// where this is not the case.
51// Furthermore moc is wrong about pretty much everything on 64bit windows. We need to hardcode
52// the size there.
53// Likewise, we also have to determine the size of long and ulong indirectly.
54
55#if defined(Q_OS_WIN64)
56
57static_assert(sizeof(long) == 4);
58#define QML_LONG_IS_32BIT
59static_assert(sizeof(qsizetype) == 8);
60#define QML_SIZE_IS_64BIT
61
62#elif QT_POINTER_SIZE == 4
63
64static_assert(sizeof(long) == 4);
65#define QML_LONG_IS_32BIT
66static_assert(sizeof(qsizetype) == 4);
67#define QML_SIZE_IS_32BIT
68
69#else
70
71static_assert(sizeof(long) == 8);
72#define QML_LONG_IS_64BIT
73static_assert(sizeof(qsizetype) == 8);
74#define QML_SIZE_IS_64BIT
75
76#endif
77
78#define QML_EXTENDED_JAVASCRIPT(EXTENDED_TYPE)
79 Q_CLASSINFO("QML.Extended", #EXTENDED_TYPE)
80 Q_CLASSINFO("QML.ExtensionIsJavaScript", "true")
81
82template<typename A> struct QQmlPrimitiveAliasFriend {};
83
84#define QML_PRIMITIVE_ALIAS(PRIMITIVE_ALIAS)
85 Q_CLASSINFO("QML.PrimitiveAlias", #PRIMITIVE_ALIAS)
86 friend QQmlPrimitiveAliasFriend<PRIMITIVE_ALIAS>;
87
89{
90 Q_GADGET
91 QML_VALUE_TYPE(void)
93#if !QT_CONFIG(regularexpression)
95#endif
96 QML_FOREIGN(void)
97};
98
100{
101 Q_GADGET
102 QML_VALUE_TYPE(var)
106};
107
109{
110 Q_GADGET
111 QML_NAMED_ELEMENT(QtObject)
114 Q_CLASSINFO("QML.Root", "true")
115};
116
118{
119 Q_GADGET
120 QML_VALUE_TYPE(int)
122 QML_FOREIGN(int)
123#ifdef QML_SIZE_IS_32BIT
124 // Keep qsizetype as primitive alias. We want it as separate type.
126#endif
127};
128
130{
131 Q_GADGET
132 QML_FOREIGN(qint32)
133 QML_USING(int)
134};
135
137{
138 Q_GADGET
139 QML_FOREIGN(int32_t)
140 QML_USING(int)
141};
142
144{
145 Q_GADGET
146 QML_VALUE_TYPE(real)
147 QML_VALUE_TYPE(double)
149 QML_FOREIGN(double)
150};
151
153{
154 Q_GADGET
155 QML_VALUE_TYPE(string)
158};
159
161{
162 Q_GADGET
163 QML_ANONYMOUS
166};
167
169{
170 Q_GADGET
171 QML_VALUE_TYPE(bool)
173 QML_FOREIGN(bool)
174};
175
177{
178 Q_GADGET
179 QML_VALUE_TYPE(date)
182};
183
185{
186 Q_GADGET
187 QML_VALUE_TYPE(url)
190};
191
192#if QT_CONFIG(regularexpression)
193struct QQmlRegexpForeign
194{
195 Q_GADGET
196 QML_VALUE_TYPE(regexp)
197 QML_EXTENDED_JAVASCRIPT(RegExp)
198 QML_FOREIGN(QRegularExpression)
199};
200#endif
201
203{
204 Q_GADGET
205 QML_ANONYMOUS
208};
209
211{
212 Q_GADGET
213 QML_ANONYMOUS
216};
217
219{
220 Q_GADGET
221 QML_ANONYMOUS
224};
225
227{
228 Q_GADGET
229 QML_ANONYMOUS
232};
233
235{
236 Q_GADGET
237 QML_FOREIGN(int8_t)
239};
240
242{
243 Q_GADGET
244 QML_ANONYMOUS
247};
248
250{
251 Q_GADGET
252 QML_FOREIGN(uint8_t)
254};
255
257{
258 Q_GADGET
259 QML_FOREIGN(uchar)
261};
262
264{
265 Q_GADGET
266 QML_FOREIGN(char)
267#if CHAR_MAX == UCHAR_MAX
269#elif CHAR_MAX == SCHAR_MAX
271#else
272# error char is neither quint8 nor qint8
273#endif
274};
275
277{
278 Q_GADGET
279 QML_ANONYMOUS
281 QML_FOREIGN(short)
282};
283
285{
286 Q_GADGET
287 QML_FOREIGN(qint16)
288 QML_USING(short)
289};
290
292{
293 Q_GADGET
294 QML_FOREIGN(int16_t)
295 QML_USING(short)
296};
297
299{
300 Q_GADGET
301 QML_ANONYMOUS
304};
305
307{
308 Q_GADGET
309 QML_FOREIGN(quint16)
311};
312
314{
315 Q_GADGET
316 QML_FOREIGN(uint16_t)
318};
319
321{
322 Q_GADGET
323 QML_ANONYMOUS
326};
327
329{
330 Q_GADGET
331 QML_FOREIGN(quint32)
333};
334
336{
337 Q_GADGET
338 QML_FOREIGN(uint32_t)
340};
341
343{
344 Q_GADGET
345 QML_ANONYMOUS
349 // Keep qsizetype as primitive alias. We want it as separate type.
351#endif
352};
353
355{
356 Q_GADGET
357 QML_FOREIGN(qint64)
359};
360
362{
363 Q_GADGET
364 QML_FOREIGN(int64_t)
366};
367
369{
370 Q_GADGET
371 QML_FOREIGN(long)
372#if defined QML_LONG_IS_32BIT
373 QML_USING(int)
374#elif defined QML_LONG_IS_64BIT
376#else
377# error long is neither 32bit nor 64bit
378#endif
379};
380
382{
383 Q_GADGET
384 QML_ANONYMOUS
387};
388
390{
391 Q_GADGET
392 QML_FOREIGN(quint64)
394};
395
397{
398 Q_GADGET
399 QML_FOREIGN(uint64_t)
401};
402
404{
405 Q_GADGET
406 QML_FOREIGN(ulong)
407#if defined QML_LONG_IS_32BIT
409#elif defined QML_LONG_IS_64BIT
411#else
412# error ulong is neither 32bit nor 64bit
413#endif
414};
415
417{
418 Q_GADGET
419 QML_ANONYMOUS
421 QML_FOREIGN(float)
422};
423
425{
426 Q_GADGET
427 QML_FOREIGN(qreal)
428#if !defined(QT_COORD_TYPE) || defined(QT_COORD_TYPE_IS_DOUBLE)
429 QML_USING(double)
430#elif defined(QT_COORD_TYPE_IS_FLOAT)
431 QML_USING(float)
432#else
433# error qreal is neither float nor double
434#endif
435};
436
438{
439 Q_GADGET
440 QML_ANONYMOUS
443};
444
446{
447 Q_GADGET
448 QML_ANONYMOUS
451};
452
454{
455 Q_GADGET
456 QML_ANONYMOUS
459};
460
462{
463 Q_GADGET
464 QML_ANONYMOUS
465 QML_EXTENDED_JAVASCRIPT(ArrayBuffer)
467};
468
470{
471 Q_GADGET
472 QML_ANONYMOUS
475};
476
478{
479 Q_GADGET
480 QML_ANONYMOUS
483};
484
486{
487 Q_GADGET
488 QML_ANONYMOUS
491};
492
494{
495 Q_GADGET
496 QML_ANONYMOUS
499};
500
502{
503 Q_GADGET
504 QML_FOREIGN(QList<QObject*>)
506};
507
509{
510 Q_GADGET
511 QML_ANONYMOUS
514};
515
517{
518 Q_GADGET
519 QML_NAMED_ELEMENT(Component)
522};
523
525{
526 Q_GADGET
527 QML_ANONYMOUS
529};
530
532{
533 Q_GADGET
534 QML_ANONYMOUS
537};
538
540{
541 Q_GADGET
542 QML_ANONYMOUS
545};
546
548{
549 Q_GADGET
550 QML_ANONYMOUS
553};
554
556{
557 Q_GADGET
558 QML_ANONYMOUS
561};
562
563QT_END_NAMESPACE
564
565#endif // QQMLBUILTINS_H
#define QML_PRIMITIVE_ALIAS(PRIMITIVE_ALIAS)
#define QML_SIZE_IS_64BIT
#define QML_LONG_IS_64BIT
#define QML_EXTENDED_JAVASCRIPT(EXTENDED_TYPE)