7#include <QtQml/qqmlprivate.h>
8#include <QtQml/qjsvalue.h>
9#include <QtQml/qqmlregistration.h>
11#include <QtCore/qbytearray.h>
12#include <QtCore/qmetaobject.h>
13#include <QtCore/qmetacontainer.h>
14#include <QtCore/qversionnumber.h>
16#define QML_VERSION 0x020000
17#define QML_VERSION_STR "2.0"
19#define QML_DECLARE_TYPE(TYPE)
20 Q_DECLARE_METATYPE(TYPE*)
21 Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)
23#define QML_DECLARE_TYPE_HASMETATYPE(TYPE)
24 Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)
26#define QML_DECLARE_INTERFACE(INTERFACE)
29#define QML_DECLARE_INTERFACE_HASMETATYPE(INTERFACE)
33 QML_HAS_ATTACHED_PROPERTIES = 0x01
36#define QML_DECLARE_TYPEINFO(TYPE, FLAGS) QT_BEGIN_NAMESPACE
40{public
43 hasAttachedProperties = (((FLAGS) & QML_HAS_ATTACHED_PROPERTIES) == QML_HAS_ATTACHED_PROPERTIES)
45};QT_END_NAMESPACE
58 QQmlPrivate::RegisterType type = {
59 QQmlPrivate::RegisterType::CurrentVersion,
60 QQmlPrivate::QmlMetaType<T>::self(),
61 QQmlPrivate::QmlMetaType<T>::list(),
65 QQmlPrivate::ValueType<T,
void>::create,
67 uri, QTypeRevision::fromVersion(versionMajor, 0),
nullptr,
68 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
70 QQmlPrivate::attachedPropertiesFunc<T>(),
71 QQmlPrivate::attachedPropertiesMetaObject<T>(),
73 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
74 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
75 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
80 QTypeRevision::zero(),
81 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
82 QQmlPrivate::ValueTypeCreationMethod::None,
85 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
89template<
typename T,
int metaObjectRevisionMinor>
92 QQmlPrivate::RegisterType type = {
93 QQmlPrivate::RegisterType::CurrentVersion,
94 QQmlPrivate::QmlMetaType<T>::self(),
95 QQmlPrivate::QmlMetaType<T>::list(),
100 QQmlPrivate::ValueType<T,
void>::create,
103 QTypeRevision::fromVersion(versionMajor, 0),
105 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
107 QQmlPrivate::attachedPropertiesFunc<T>(),
108 QQmlPrivate::attachedPropertiesMetaObject<T>(),
110 QQmlPrivate::StaticCastSelector<T, QQmlParserStatus>::cast(),
111 QQmlPrivate::StaticCastSelector<T, QQmlPropertyValueSource>::cast(),
112 QQmlPrivate::StaticCastSelector<T, QQmlPropertyValueInterceptor>::cast(),
118 QTypeRevision::fromMinorVersion(metaObjectRevisionMinor),
119 QQmlPrivate::StaticCastSelector<T, QQmlFinalizerHook>::cast(),
120 QQmlPrivate::ValueTypeCreationMethod::None,
123 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
131 QQmlPrivate::qmlRegisterTypeAndRevisions<T,
void>(
132 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
nullptr,
139 QML_NAMED_ELEMENT(TypeNotAvailable)
144int Q_QML_EXPORT qmlRegisterTypeNotAvailable(
const char *uri,
int versionMajor,
int versionMinor,
145 const char *qmlName,
const QString &message);
148int qmlRegisterUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
150 QQmlPrivate::RegisterType type = {
151 QQmlPrivate::RegisterType::CurrentVersion,
152 QQmlPrivate::QmlMetaType<T>::self(),
153 QQmlPrivate::QmlMetaType<T>::list(),
158 QQmlPrivate::ValueType<T,
void>::create,
160 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
161 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
163 QQmlPrivate::attachedPropertiesFunc<T>(),
164 QQmlPrivate::attachedPropertiesMetaObject<T>(),
166 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
167 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
168 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
173 QTypeRevision::zero(),
174 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
175 QQmlPrivate::ValueTypeCreationMethod::None,
178 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
181template<
typename T,
int metaObjectRevision>
182int qmlRegisterUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
184 QQmlPrivate::RegisterType type = {
185 QQmlPrivate::RegisterType::CurrentVersion,
186 QQmlPrivate::QmlMetaType<T>::self(),
187 QQmlPrivate::QmlMetaType<T>::list(),
192 QQmlPrivate::ValueType<T,
void>::create,
194 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
195 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
197 QQmlPrivate::attachedPropertiesFunc<T>(),
198 QQmlPrivate::attachedPropertiesMetaObject<T>(),
200 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
201 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
202 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
207 QTypeRevision::fromMinorVersion(metaObjectRevision),
208 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
209 QQmlPrivate::ValueTypeCreationMethod::None,
212 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
215template<
typename T,
typename E>
216int qmlRegisterExtendedUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
218 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
219 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
221 attached = QQmlPrivate::attachedPropertiesFunc<T>();
222 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
225 QQmlPrivate::RegisterType type = {
226 QQmlPrivate::RegisterType::CurrentVersion,
227 QQmlPrivate::QmlMetaType<T>::self(),
228 QQmlPrivate::QmlMetaType<T>::list(),
233 QQmlPrivate::ValueType<T, E>::create,
235 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
236 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
241 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
242 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
243 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
245 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
248 QTypeRevision::zero(),
249 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
250 QQmlPrivate::ValueTypeCreationMethod::None,
253 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
256template<
typename T,
typename E,
int metaObjectRevision>
257int qmlRegisterExtendedUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
259 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
260 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
262 attached = QQmlPrivate::attachedPropertiesFunc<T>();
263 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
266 QQmlPrivate::RegisterType type = {
267 QQmlPrivate::RegisterType::CurrentVersion,
268 QQmlPrivate::QmlMetaType<T>::self(),
269 QQmlPrivate::QmlMetaType<T>::list(),
274 QQmlPrivate::ValueType<T, E>::create,
276 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
277 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
282 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
283 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
284 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
286 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
289 QTypeRevision::fromMinorVersion(metaObjectRevision),
290 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
291 QQmlPrivate::ValueTypeCreationMethod::None,
294 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
297Q_QML_EXPORT
int qmlRegisterUncreatableMetaObject(
const QMetaObject &staticMetaObject,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason);
300int qmlRegisterType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
302 static_assert(!std::is_abstract_v<T>,
303 "It is not possible to register an abstract type with qmlRegisterType. "
304 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
306 QQmlPrivate::RegisterType type = {
307 QQmlPrivate::RegisterType::CurrentVersion,
308 QQmlPrivate::QmlMetaType<T>::self(),
309 QQmlPrivate::QmlMetaType<T>::list(),
310 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
312 QQmlPrivate::ValueType<T,
void>::create,
314 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
315 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
317 QQmlPrivate::attachedPropertiesFunc<T>(),
318 QQmlPrivate::attachedPropertiesMetaObject<T>(),
320 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
321 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
322 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
327 QTypeRevision::zero(),
328 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
329 QQmlPrivate::ValueTypeCreationMethod::None,
332 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
335template<
typename T,
int metaObjectRevision>
336int qmlRegisterType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
338 static_assert(!std::is_abstract_v<T>,
339 "It is not possible to register an abstract type with qmlRegisterType. "
340 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
342 QQmlPrivate::RegisterType type = {
343 QQmlPrivate::RegisterType::CurrentVersion,
344 QQmlPrivate::QmlMetaType<T>::self(),
345 QQmlPrivate::QmlMetaType<T>::list(),
346 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
348 QQmlPrivate::ValueType<T,
void>::create,
350 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
351 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
353 QQmlPrivate::attachedPropertiesFunc<T>(),
354 QQmlPrivate::attachedPropertiesMetaObject<T>(),
356 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
357 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
358 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
363 QTypeRevision::fromMinorVersion(metaObjectRevision),
364 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
365 QQmlPrivate::ValueTypeCreationMethod::None,
368 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
371template<
typename T,
int metaObjectRevision>
374 QQmlPrivate::RegisterType type = {
375 QQmlPrivate::RegisterType::CurrentVersion,
376 QQmlPrivate::QmlMetaType<T>::self(),
377 QQmlPrivate::QmlMetaType<T>::list(),
378 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
380 QQmlPrivate::ValueType<T,
void>::create,
382 uri, QTypeRevision::fromVersion(versionMajor, versionMinor),
nullptr,
383 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
385 QQmlPrivate::attachedPropertiesFunc<T>(),
386 QQmlPrivate::attachedPropertiesMetaObject<T>(),
388 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
389 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
390 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
395 QTypeRevision::fromMinorVersion(metaObjectRevision),
396 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
397 QQmlPrivate::ValueTypeCreationMethod::None,
400 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
403template<
typename T,
typename E>
406 static_assert(!std::is_abstract_v<T>,
407 "It is not possible to register an extension to an abstract type with qmlRegisterExtendedType.");
409 static_assert(!std::is_abstract_v<E>,
410 "It is not possible to register an abstract type with qmlRegisterExtendedType. "
411 "Maybe you wanted qmlRegisterExtendedUncreatableType?");
413 QQmlPrivate::RegisterType type = {
414 QQmlPrivate::RegisterType::CurrentVersion,
415 QQmlPrivate::QmlMetaType<T>::self(),
416 QQmlPrivate::QmlMetaType<T>::list(),
421 QQmlPrivate::ValueType<T, E>::create,
423 uri, QTypeRevision::fromVersion(versionMajor, 0),
nullptr,
424 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
426 QQmlPrivate::attachedPropertiesFunc<T>(),
427 QQmlPrivate::attachedPropertiesMetaObject<T>(),
429 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
430 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
431 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
433 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
436 QTypeRevision::zero(),
437 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
438 QQmlPrivate::ValueTypeCreationMethod::None,
441 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
444template<
typename T,
typename E>
448 static_assert(!std::is_abstract_v<T>,
449 "It is not possible to register an extension to an abstract type with qmlRegisterExtendedType.");
451 static_assert(!std::is_abstract_v<E>,
452 "It is not possible to register an abstract type with qmlRegisterExtendedType. "
453 "Maybe you wanted qmlRegisterExtendedUncreatableType?");
455 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
456 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
458 attached = QQmlPrivate::attachedPropertiesFunc<T>();
459 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
462 QQmlPrivate::RegisterType type = {
463 QQmlPrivate::RegisterType::CurrentVersion,
464 QQmlPrivate::QmlMetaType<T>::self(),
465 QQmlPrivate::QmlMetaType<T>::list(),
466 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
468 QQmlPrivate::ValueType<T, E>::create,
470 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
471 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
476 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
477 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
478 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
480 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
483 QTypeRevision::zero(),
484 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
485 QQmlPrivate::ValueTypeCreationMethod::None,
488 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
494 QQmlPrivate::RegisterInterface qmlInterface = {
498 QMetaType::fromType<T *>(),
499 QMetaType::fromType<QQmlListProperty<T> >(),
500 qobject_interface_iid<T *>(),
503 QTypeRevision::fromVersion(versionMajor, 0)
506 return QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface);
511 const char *qmlName, QQmlCustomParser *parser)
513 static_assert(!std::is_abstract_v<T>,
514 "It is not possible to register an abstract type with qmlRegisterCustomType. "
515 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
517 QQmlPrivate::RegisterType type = {
518 QQmlPrivate::RegisterType::CurrentVersion,
519 QQmlPrivate::QmlMetaType<T>::self(),
520 QQmlPrivate::QmlMetaType<T>::list(),
521 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
523 QQmlPrivate::ValueType<T,
void>::create,
525 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
526 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
528 QQmlPrivate::attachedPropertiesFunc<T>(),
529 QQmlPrivate::attachedPropertiesMetaObject<T>(),
531 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
532 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
533 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
538 QTypeRevision::zero(),
539 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
540 QQmlPrivate::ValueTypeCreationMethod::None,
543 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
546template<
typename T,
int metaObjectRevision>
548 const char *qmlName, QQmlCustomParser *parser)
550 static_assert(!std::is_abstract_v<T>,
551 "It is not possible to register an abstract type with qmlRegisterCustomType. "
552 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
554 QQmlPrivate::RegisterType type = {
555 QQmlPrivate::RegisterType::CurrentVersion,
556 QQmlPrivate::QmlMetaType<T>::self(),
557 QQmlPrivate::QmlMetaType<T>::list(),
558 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
560 QQmlPrivate::ValueType<T,
void>::create,
562 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
563 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
565 QQmlPrivate::attachedPropertiesFunc<T>(),
566 QQmlPrivate::attachedPropertiesMetaObject<T>(),
568 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
569 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
570 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
575 QTypeRevision::fromMinorVersion(metaObjectRevision),
576 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
577 QQmlPrivate::ValueTypeCreationMethod::None,
580 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
583template<
typename T,
typename E>
585 const char *qmlName, QQmlCustomParser *parser)
587 static_assert(!std::is_abstract_v<T>,
588 "It is not possible to register an extension to an abstract type with qmlRegisterCustomExtendedType.");
590 static_assert(!std::is_abstract_v<E>,
591 "It is not possible to register an abstract type with qmlRegisterCustomExtendedType.");
593 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
594 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
596 attached = QQmlPrivate::attachedPropertiesFunc<T>();
597 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
600 QQmlPrivate::RegisterType type = {
601 QQmlPrivate::RegisterType::CurrentVersion,
602 QQmlPrivate::QmlMetaType<T>::self(),
603 QQmlPrivate::QmlMetaType<T>::list(),
604 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
606 QQmlPrivate::ValueType<T, E>::create,
608 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
609 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
614 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
615 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
616 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
618 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
621 QTypeRevision::zero(),
622 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
623 QQmlPrivate::ValueTypeCreationMethod::None,
626 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
637Q_QML_EXPORT QQmlAttachedPropertiesFunc qmlAttachedPropertiesFunction(QObject *,
638 const QMetaObject *);
639Q_QML_EXPORT QObject *qmlAttachedPropertiesObject(QObject *, QQmlAttachedPropertiesFunc func,
640 bool createIfMissing =
true);
669 if (
const auto func = QQmlPrivate::attachedPropertiesFunc<T>())
670 return qmlAttachedPropertiesObject(
const_cast<QObject *>(obj), func, create);
674 static const auto func = qmlAttachedPropertiesFunction(
nullptr, &T::staticMetaObject);
675 return qmlAttachedPropertiesObject(
const_cast<QObject *>(obj), func, create);
679int qmlRegisterSingletonType(
680 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName,
681 std::function<QJSValue(QQmlEngine *, QJSEngine *)> callback)
683template<
typename F,
typename std::enable_if<std::is_convertible<F, std::function<QJSValue(QQmlEngine *, QJSEngine *)>>::value,
void>::type* =
nullptr>
684int qmlRegisterSingletonType(
685 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, F &&callback)
688 QQmlPrivate::RegisterSingletonType api = {
691 QTypeRevision::fromVersion(versionMajor, versionMinor),
693 std::forward<F>(callback),
698 QTypeRevision::zero()
701 return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api);
706int qmlRegisterSingletonType(
707 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName,
708 std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)
710template<
typename T,
typename F,
typename std::enable_if<std::is_convertible<F, std::function<QObject *(QQmlEngine *, QJSEngine *)>>::value,
void>::type* =
nullptr>
711int qmlRegisterSingletonType(
712 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, F &&callback)
715 QQmlPrivate::RegisterSingletonType api = {
718 QTypeRevision::fromVersion(versionMajor, versionMinor),
721 std::forward<F>(callback),
722 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
723 QQmlPrivate::QmlMetaType<T>::self(),
725 QTypeRevision::zero()
728 return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api);
732int qmlRegisterSingletonInstance(
const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, QObject *cppObject)
735inline auto qmlRegisterSingletonInstance(
const char *uri,
int versionMajor,
int versionMinor,
736 const char *typeName, T *cppObject) ->
typename std::enable_if<std::is_base_of<QObject, T>::value,
int>::type
739 QQmlPrivate::SingletonInstanceFunctor registrationFunctor;
740 registrationFunctor.m_object = cppObject;
741 return qmlRegisterSingletonType<T>(uri, versionMajor, versionMinor, typeName, registrationFunctor);
744inline int qmlRegisterSingletonType(
const QUrl &url,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
746 if (url.isRelative()) {
748 qWarning(
"qmlRegisterSingletonType requires absolute URLs.");
752 QQmlPrivate::RegisterCompositeSingletonType type = {
756 QTypeRevision::fromVersion(versionMajor, versionMinor),
760 return QQmlPrivate::qmlregister(QQmlPrivate::CompositeSingletonRegistration, &type);
763inline int qmlRegisterType(
const QUrl &url,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
765 if (url.isRelative()) {
767 qWarning(
"qmlRegisterType requires absolute URLs.");
771 QQmlPrivate::RegisterCompositeType type = {
775 QTypeRevision::fromVersion(versionMajor, versionMinor),
779 return QQmlPrivate::qmlregister(QQmlPrivate::CompositeRegistration, &type);
782template<
typename Container>
783inline int qmlRegisterAnonymousSequentialContainer(
const char *uri,
int versionMajor)
785 static_assert(!std::is_abstract_v<Container>,
786 "It is not possible to register an abstract container with qmlRegisterAnonymousSequentialContainer.");
788 QQmlPrivate::RegisterSequentialContainer type = {
791 QTypeRevision::fromMajorVersion(versionMajor),
793 QMetaType::fromType<Container>(),
794 QMetaSequence::fromContainer<Container>(),
795 QTypeRevision::zero()
798 return QQmlPrivate::qmlregister(QQmlPrivate::SequentialContainerRegistration, &type);
801template<
class T,
class Resolved,
class Extended,
bool Singleton,
bool Interface,
bool Sequence,
bool Uncreatable>
802struct QmlTypeAndRevisionsRegistration;
804template<
class T,
class Resolved,
class Extended>
807 const QMetaObject *extension)
809#if QT_DEPRECATED_SINCE(6
, 4
)
811 if constexpr (!QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
812 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::UnconstructibleType,
813 QMetaType::fromType<Resolved>());
816 if constexpr (!std::is_base_of_v<QObject, Resolved>
817 && QQmlTypeInfo<T>::hasAttachedProperties) {
818 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::NonQObjectWithAtached,
819 QMetaType::fromType<Resolved>());
822 static_assert(QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors(),
823 "This type is neither a default constructible QObject, nor a default- "
824 "and copy-constructible Q_GADGET, nor marked as uncreatable.\n"
825 "You should not use it as a QML type.");
826 static_assert(std::is_base_of_v<QObject, Resolved>
827 || !QQmlTypeInfo<Resolved>::hasAttachedProperties);
829 QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
830 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
831 qmlTypeIds, extension);
835template<
class T,
class Resolved,
class Extended>
836struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
false,
false,
false,
true> {
837 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
838 const QMetaObject *extension)
840#if QT_DEPRECATED_SINCE(6
, 4
)
842 if constexpr (!std::is_base_of_v<QObject, Resolved>) {
843 if constexpr (!QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
844 QQmlPrivate::qmlRegistrationWarning(
845 QQmlPrivate::UnconstructibleType, QMetaType::fromType<Resolved>());
847 if constexpr (QQmlTypeInfo<Resolved>::hasAttachedProperties) {
848 QQmlPrivate::qmlRegistrationWarning(
849 QQmlPrivate::NonQObjectWithAtached, QMetaType::fromType<Resolved>());
852#elif QT_DEPRECATED_SINCE(6
, 10
)
853 static_assert(std::is_base_of_v<QObject, Resolved>
854 || !QQmlTypeInfo<Resolved>::hasAttachedProperties);
857 if constexpr (!std::is_base_of_v<QObject, Resolved>
858 && !QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
859 QQmlPrivate::qmlRegistrationWarning(
860 QQmlPrivate::UnconstructibleType, QMetaType::fromType<Resolved>());
863 static_assert(std::is_base_of_v<QObject, Resolved>
864 || (QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()
865 && !QQmlTypeInfo<Resolved>::hasAttachedProperties));
867 QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
868 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
869 qmlTypeIds, extension);
873template<
class T,
class Resolved>
874struct QmlTypeAndRevisionsRegistration<T, Resolved,
void,
false,
false,
true,
true> {
875 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
879 QQmlPrivate::qmlRegisterSequenceAndRevisions<Resolved>(
880 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
885template<
class T,
class Resolved,
class Extended>
886struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
true,
false,
false,
false> {
887 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
888 const QMetaObject *extension)
890#if QT_DEPRECATED_SINCE(6
, 4
)
892 if constexpr (QQmlPrivate::singletonConstructionMode<Resolved, T>()
893 == QQmlPrivate::SingletonConstructionMode::None) {
894 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::UnconstructibleSingleton,
895 QMetaType::fromType<Resolved>());
898 static_assert(QQmlPrivate::singletonConstructionMode<Resolved, T>()
899 != QQmlPrivate::SingletonConstructionMode::None,
900 "A singleton needs either a default constructor or, when adding a default "
901 "constructor is infeasible, a public static "
902 "create(QQmlEngine *, QJSEngine *) method");
905 QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved, Extended, T>(
906 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
907 qmlTypeIds, extension);
911template<
class T,
class Resolved,
class Extended>
912struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
true,
false,
false,
true> {
913 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
914 const QMetaObject *extension)
917 QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved, Extended, T>(
918 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
919 qmlTypeIds, extension);
923template<
class T,
class Resolved>
924struct QmlTypeAndRevisionsRegistration<T, Resolved,
void,
false,
true,
false,
false> {
925 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
928 const int id = qmlRegisterInterface<Resolved>(uri, versionMajor);
930 qmlTypeIds->append(id);
934template<
typename... T>
937 (QmlTypeAndRevisionsRegistration<
938 T,
typename QQmlPrivate::QmlResolved<T>::Type,
939 typename QQmlPrivate::QmlExtended<T>::Type,
940 QQmlPrivate::QmlSingleton<T>::Value,
941 QQmlPrivate::QmlInterface<T>::Value,
942 QQmlPrivate::QmlSequence<T>::Value,
943 QQmlPrivate::QmlUncreatable<T>::Value || QQmlPrivate::QmlAnonymous<T>::Value>
944 ::registerTypeAndRevisions(uri, versionMajor, qmlTypeIds,
945 QQmlPrivate::QmlExtendedNamespace<T>::metaObject()), ...);
949 const char *uri,
int versionMajor,
950 QList<
int> *qmlTypeIds,
951 const QMetaObject *classInfoMetaObject,
952 const QMetaObject *extensionMetaObject)
954 QQmlPrivate::RegisterTypeAndRevisions type = {
964 QTypeRevision::fromMajorVersion(versionMajor),
967 (classInfoMetaObject ? classInfoMetaObject : metaObject),
979 &qmlCreateCustomParser<
void>,
986 qmlregister(QQmlPrivate::TypeAndRevisionsRegistration, &type);
990 const char *uri,
int versionMajor,
991 QList<
int> *qmlTypeIds =
nullptr,
992 const QMetaObject *classInfoMetaObject =
nullptr)
994 qmlRegisterNamespaceAndRevisions(metaObject, uri, versionMajor, qmlTypeIds,
995 classInfoMetaObject,
nullptr);
998template<
typename Enum>
1001 const QMetaType metaType = QMetaType::fromType<Enum>();
1008 if constexpr (QtPrivate::IsQEnumHelper<Enum>::Value)
1011 QMetaType::registerNormalizedTypedef(name, metaType);
1014int Q_QML_EXPORT qmlTypeId(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName);
The QQmlContext class defines a context within a QML engine.
The QQmlEngine class provides an environment for instantiating QML components.
void updateCurrentTime(int) override
int duration() const override
QQuickBoundaryReturnJob(QQuickBoundaryRulePrivate *br, qreal to)
void updateState(QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState) override
QQuickBoundaryRulePrivate * boundaryRule
qreal easedOvershoot(qreal overshootingValue)
QQuickBoundaryReturnJob * returnAnimationJob
int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, QQmlCustomParser *parser)
#define QML_DECLARE_TYPE_HASMETATYPE(TYPE)
Q_QML_EXPORT void qmlRegisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor=QQmlModuleImportLatest, int importMinor=QQmlModuleImportLatest)
QQmlCustomParser * qmlCreateCustomParser()
void qmlRegisterEnum(const char *name)
Q_QML_EXPORT bool qmlProtectModule(const char *uri, int majVersion)
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
void qmlRegisterAnonymousTypesAndRevisions(const char *uri, int versionMajor)
void qmlRegisterNamespaceAndRevisions(const QMetaObject *metaObject, const char *uri, int versionMajor, QList< int > *qmlTypeIds=nullptr, const QMetaObject *classInfoMetaObject=nullptr)
int qmlRegisterCustomExtendedType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, QQmlCustomParser *parser)
#define QML_DECLARE_TYPE(TYPE)
Q_QML_EXPORT void qmlExecuteDeferred(QObject *)
\inmodule QtQml \title Functions to register C++ types to QML
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
void qmlRegisterNamespaceAndRevisions(const QMetaObject *metaObject, const char *uri, int versionMajor, QList< int > *qmlTypeIds, const QMetaObject *classInfoMetaObject, const QMetaObject *extensionMetaObject)
void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor, QList< int > *qmlTypeIds)
int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, QQmlCustomParser *parser)
int qmlRegisterExtendedType(const char *uri, int versionMajor)
QQmlModuleImportSpecialVersions
@ QQmlModuleImportModuleAny
int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)
int qmlRegisterAnonymousType(const char *uri, int versionMajor)
Q_QML_EXPORT void qmlUnregisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor=QQmlModuleImportLatest, int importMinor=QQmlModuleImportLatest)
QObject * qmlAttachedPropertiesObject(const QObject *obj, bool create=true)
int qmlRegisterAnonymousType(const char *uri, int versionMajor)
Q_QML_EXPORT void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)
int qmlRegisterInterface(const char *uri, int versionMajor)
QDebug Q_QML_EXPORT operator<<(QDebug debug, const QQmlError &error)
static void registerTypeAndRevisions(const char *uri, int versionMajor, QList< int > *qmlTypeIds, const QMetaObject *extension)