8#include <QtQml/qqmlprivate.h>
9#include <QtQml/qjsvalue.h>
10#include <QtQml/qqmlregistration.h>
12#include <QtCore/qbytearray.h>
13#include <QtCore/qmetaobject.h>
14#include <QtCore/qmetasequence.h>
15#include <QtCore/qtyperevision.h>
16#if !defined(QT_LEAN_HEADERS) || QT_LEAN_HEADERS < 3
17#include <QtCore/qversionnumber.h>
20#define QML_VERSION 0x020000
21#define QML_VERSION_STR "2.0"
23#define QML_DECLARE_TYPE(TYPE)
24 Q_DECLARE_METATYPE(TYPE*)
25 Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)
27#define QML_DECLARE_TYPE_HASMETATYPE(TYPE)
28 Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)
30#define QML_DECLARE_INTERFACE(INTERFACE)
33#define QML_DECLARE_INTERFACE_HASMETATYPE(INTERFACE)
37 QML_HAS_ATTACHED_PROPERTIES = 0x01
40#define QML_DECLARE_TYPEINFO(TYPE, FLAGS) QT_BEGIN_NAMESPACE
44{public
47 hasAttachedProperties = (((FLAGS) & QML_HAS_ATTACHED_PROPERTIES) == QML_HAS_ATTACHED_PROPERTIES)
49};QT_END_NAMESPACE
62 QQmlPrivate::RegisterType type = {
63 QQmlPrivate::RegisterType::CurrentVersion,
64 QQmlPrivate::QmlMetaType<T>::self(),
65 QQmlPrivate::QmlMetaType<T>::list(),
69 QQmlPrivate::ValueType<T,
void>::create,
71 uri, QTypeRevision::fromVersion(versionMajor, 0),
nullptr,
72 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
74 QQmlPrivate::attachedPropertiesFunc<T>(),
75 QQmlPrivate::attachedPropertiesMetaObject<T>(),
77 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
78 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
79 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
84 QTypeRevision::zero(),
85 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
86 QQmlPrivate::ValueTypeCreationMethod::None,
89 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
93template<
typename T,
int metaObjectRevisionMinor>
96 QQmlPrivate::RegisterType type = {
97 QQmlPrivate::RegisterType::CurrentVersion,
98 QQmlPrivate::QmlMetaType<T>::self(),
99 QQmlPrivate::QmlMetaType<T>::list(),
104 QQmlPrivate::ValueType<T,
void>::create,
107 QTypeRevision::fromVersion(versionMajor, 0),
109 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
111 QQmlPrivate::attachedPropertiesFunc<T>(),
112 QQmlPrivate::attachedPropertiesMetaObject<T>(),
114 QQmlPrivate::StaticCastSelector<T, QQmlParserStatus>::cast(),
115 QQmlPrivate::StaticCastSelector<T, QQmlPropertyValueSource>::cast(),
116 QQmlPrivate::StaticCastSelector<T, QQmlPropertyValueInterceptor>::cast(),
122 QTypeRevision::fromMinorVersion(metaObjectRevisionMinor),
123 QQmlPrivate::StaticCastSelector<T, QQmlFinalizerHook>::cast(),
124 QQmlPrivate::ValueTypeCreationMethod::None,
127 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
135 QQmlPrivate::qmlRegisterTypeAndRevisions<T,
void>(
136 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
nullptr,
143 QML_NAMED_ELEMENT(TypeNotAvailable)
148int Q_QML_EXPORT qmlRegisterTypeNotAvailable(
const char *uri,
int versionMajor,
int versionMinor,
149 const char *qmlName,
const QString &message);
152int qmlRegisterUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
154 QQmlPrivate::RegisterType type = {
155 QQmlPrivate::RegisterType::CurrentVersion,
156 QQmlPrivate::QmlMetaType<T>::self(),
157 QQmlPrivate::QmlMetaType<T>::list(),
162 QQmlPrivate::ValueType<T,
void>::create,
164 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
165 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
167 QQmlPrivate::attachedPropertiesFunc<T>(),
168 QQmlPrivate::attachedPropertiesMetaObject<T>(),
170 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
171 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
172 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
177 QTypeRevision::zero(),
178 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
179 QQmlPrivate::ValueTypeCreationMethod::None,
182 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
185template<
typename T,
int metaObjectRevision>
186int qmlRegisterUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
188 QQmlPrivate::RegisterType type = {
189 QQmlPrivate::RegisterType::CurrentVersion,
190 QQmlPrivate::QmlMetaType<T>::self(),
191 QQmlPrivate::QmlMetaType<T>::list(),
196 QQmlPrivate::ValueType<T,
void>::create,
198 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
199 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
201 QQmlPrivate::attachedPropertiesFunc<T>(),
202 QQmlPrivate::attachedPropertiesMetaObject<T>(),
204 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
205 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
206 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
211 QTypeRevision::fromMinorVersion(metaObjectRevision),
212 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
213 QQmlPrivate::ValueTypeCreationMethod::None,
216 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
219template<
typename T,
typename E>
220int qmlRegisterExtendedUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
222 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
223 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
225 attached = QQmlPrivate::attachedPropertiesFunc<T>();
226 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
229 QQmlPrivate::RegisterType type = {
230 QQmlPrivate::RegisterType::CurrentVersion,
231 QQmlPrivate::QmlMetaType<T>::self(),
232 QQmlPrivate::QmlMetaType<T>::list(),
237 QQmlPrivate::ValueType<T, E>::create,
239 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
240 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
245 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
246 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
247 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
249 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
252 QTypeRevision::zero(),
253 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
254 QQmlPrivate::ValueTypeCreationMethod::None,
257 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
260template<
typename T,
typename E,
int metaObjectRevision>
261int qmlRegisterExtendedUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
263 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
264 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
266 attached = QQmlPrivate::attachedPropertiesFunc<T>();
267 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
270 QQmlPrivate::RegisterType type = {
271 QQmlPrivate::RegisterType::CurrentVersion,
272 QQmlPrivate::QmlMetaType<T>::self(),
273 QQmlPrivate::QmlMetaType<T>::list(),
278 QQmlPrivate::ValueType<T, E>::create,
280 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
281 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
286 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
287 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
288 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
290 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
293 QTypeRevision::fromMinorVersion(metaObjectRevision),
294 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
295 QQmlPrivate::ValueTypeCreationMethod::None,
298 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
301Q_QML_EXPORT
int qmlRegisterUncreatableMetaObject(
const QMetaObject &staticMetaObject,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason);
304int qmlRegisterType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
306 static_assert(!std::is_abstract_v<T>,
307 "It is not possible to register an abstract type with qmlRegisterType. "
308 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
310 QQmlPrivate::RegisterType type = {
311 QQmlPrivate::RegisterType::CurrentVersion,
312 QQmlPrivate::QmlMetaType<T>::self(),
313 QQmlPrivate::QmlMetaType<T>::list(),
314 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
316 QQmlPrivate::ValueType<T,
void>::create,
318 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
319 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
321 QQmlPrivate::attachedPropertiesFunc<T>(),
322 QQmlPrivate::attachedPropertiesMetaObject<T>(),
324 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
325 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
326 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
331 QTypeRevision::zero(),
332 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
333 QQmlPrivate::ValueTypeCreationMethod::None,
336 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
339template<
typename T,
int metaObjectRevision>
340int qmlRegisterType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
342 static_assert(!std::is_abstract_v<T>,
343 "It is not possible to register an abstract type with qmlRegisterType. "
344 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
346 QQmlPrivate::RegisterType type = {
347 QQmlPrivate::RegisterType::CurrentVersion,
348 QQmlPrivate::QmlMetaType<T>::self(),
349 QQmlPrivate::QmlMetaType<T>::list(),
350 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
352 QQmlPrivate::ValueType<T,
void>::create,
354 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
355 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
357 QQmlPrivate::attachedPropertiesFunc<T>(),
358 QQmlPrivate::attachedPropertiesMetaObject<T>(),
360 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
361 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
362 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
367 QTypeRevision::fromMinorVersion(metaObjectRevision),
368 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
369 QQmlPrivate::ValueTypeCreationMethod::None,
372 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
375template<
typename T,
int metaObjectRevision>
378 QQmlPrivate::RegisterType type = {
379 QQmlPrivate::RegisterType::CurrentVersion,
380 QQmlPrivate::QmlMetaType<T>::self(),
381 QQmlPrivate::QmlMetaType<T>::list(),
382 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
384 QQmlPrivate::ValueType<T,
void>::create,
386 uri, QTypeRevision::fromVersion(versionMajor, versionMinor),
nullptr,
387 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
389 QQmlPrivate::attachedPropertiesFunc<T>(),
390 QQmlPrivate::attachedPropertiesMetaObject<T>(),
392 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
393 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
394 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
399 QTypeRevision::fromMinorVersion(metaObjectRevision),
400 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
401 QQmlPrivate::ValueTypeCreationMethod::None,
404 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
407template<
typename T,
typename E>
410 static_assert(!std::is_abstract_v<T>,
411 "It is not possible to register an extension to an abstract type with qmlRegisterExtendedType.");
413 static_assert(!std::is_abstract_v<E>,
414 "It is not possible to register an abstract type with qmlRegisterExtendedType. "
415 "Maybe you wanted qmlRegisterExtendedUncreatableType?");
417 QQmlPrivate::RegisterType type = {
418 QQmlPrivate::RegisterType::CurrentVersion,
419 QQmlPrivate::QmlMetaType<T>::self(),
420 QQmlPrivate::QmlMetaType<T>::list(),
425 QQmlPrivate::ValueType<T, E>::create,
427 uri, QTypeRevision::fromVersion(versionMajor, 0),
nullptr,
428 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
430 QQmlPrivate::attachedPropertiesFunc<T>(),
431 QQmlPrivate::attachedPropertiesMetaObject<T>(),
433 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
434 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
435 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
437 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
440 QTypeRevision::zero(),
441 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
442 QQmlPrivate::ValueTypeCreationMethod::None,
445 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
448template<
typename T,
typename E>
452 static_assert(!std::is_abstract_v<T>,
453 "It is not possible to register an extension to an abstract type with qmlRegisterExtendedType.");
455 static_assert(!std::is_abstract_v<E>,
456 "It is not possible to register an abstract type with qmlRegisterExtendedType. "
457 "Maybe you wanted qmlRegisterExtendedUncreatableType?");
459 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
460 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
462 attached = QQmlPrivate::attachedPropertiesFunc<T>();
463 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
466 QQmlPrivate::RegisterType type = {
467 QQmlPrivate::RegisterType::CurrentVersion,
468 QQmlPrivate::QmlMetaType<T>::self(),
469 QQmlPrivate::QmlMetaType<T>::list(),
470 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
472 QQmlPrivate::ValueType<T, E>::create,
474 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
475 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
480 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
481 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
482 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
484 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
487 QTypeRevision::zero(),
488 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
489 QQmlPrivate::ValueTypeCreationMethod::None,
492 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
498 QQmlPrivate::RegisterInterface qmlInterface = {
502 QMetaType::fromType<T *>(),
503 QMetaType::fromType<QQmlListProperty<T> >(),
504 qobject_interface_iid<T *>(),
507 QTypeRevision::fromVersion(versionMajor, 0)
510 return QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface);
515 const char *qmlName, QQmlCustomParser *parser)
517 static_assert(!std::is_abstract_v<T>,
518 "It is not possible to register an abstract type with qmlRegisterCustomType. "
519 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
521 QQmlPrivate::RegisterType type = {
522 QQmlPrivate::RegisterType::CurrentVersion,
523 QQmlPrivate::QmlMetaType<T>::self(),
524 QQmlPrivate::QmlMetaType<T>::list(),
525 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
527 QQmlPrivate::ValueType<T,
void>::create,
529 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
530 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
532 QQmlPrivate::attachedPropertiesFunc<T>(),
533 QQmlPrivate::attachedPropertiesMetaObject<T>(),
535 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
536 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
537 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
542 QTypeRevision::zero(),
543 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
544 QQmlPrivate::ValueTypeCreationMethod::None,
547 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
550template<
typename T,
int metaObjectRevision>
552 const char *qmlName, QQmlCustomParser *parser)
554 static_assert(!std::is_abstract_v<T>,
555 "It is not possible to register an abstract type with qmlRegisterCustomType. "
556 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
558 QQmlPrivate::RegisterType type = {
559 QQmlPrivate::RegisterType::CurrentVersion,
560 QQmlPrivate::QmlMetaType<T>::self(),
561 QQmlPrivate::QmlMetaType<T>::list(),
562 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
564 QQmlPrivate::ValueType<T,
void>::create,
566 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
567 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
569 QQmlPrivate::attachedPropertiesFunc<T>(),
570 QQmlPrivate::attachedPropertiesMetaObject<T>(),
572 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
573 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
574 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
579 QTypeRevision::fromMinorVersion(metaObjectRevision),
580 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
581 QQmlPrivate::ValueTypeCreationMethod::None,
584 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
587template<
typename T,
typename E>
589 const char *qmlName, QQmlCustomParser *parser)
591 static_assert(!std::is_abstract_v<T>,
592 "It is not possible to register an extension to an abstract type with qmlRegisterCustomExtendedType.");
594 static_assert(!std::is_abstract_v<E>,
595 "It is not possible to register an abstract type with qmlRegisterCustomExtendedType.");
597 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
598 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
600 attached = QQmlPrivate::attachedPropertiesFunc<T>();
601 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
604 QQmlPrivate::RegisterType type = {
605 QQmlPrivate::RegisterType::CurrentVersion,
606 QQmlPrivate::QmlMetaType<T>::self(),
607 QQmlPrivate::QmlMetaType<T>::list(),
608 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
610 QQmlPrivate::ValueType<T, E>::create,
612 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
613 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
618 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
619 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
620 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
622 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
625 QTypeRevision::zero(),
626 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
627 QQmlPrivate::ValueTypeCreationMethod::None,
630 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
641Q_QML_EXPORT QQmlAttachedPropertiesFunc qmlAttachedPropertiesFunction(QObject *,
642 const QMetaObject *);
643Q_QML_EXPORT QObject *qmlAttachedPropertiesObject(QObject *, QQmlAttachedPropertiesFunc func,
644 bool createIfMissing =
true);
673 if (
const auto func = QQmlPrivate::attachedPropertiesFunc<T>())
674 return qmlAttachedPropertiesObject(
const_cast<QObject *>(obj), func, create);
678 static const auto func = qmlAttachedPropertiesFunction(
nullptr, &T::staticMetaObject);
679 return qmlAttachedPropertiesObject(
const_cast<QObject *>(obj), func, create);
683int qmlRegisterSingletonType(
684 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName,
685 std::function<QJSValue(QQmlEngine *, QJSEngine *)> callback)
687template<
typename F,
typename std::enable_if<std::is_convertible<F, std::function<QJSValue(QQmlEngine *, QJSEngine *)>>::value,
void>::type* =
nullptr>
688int qmlRegisterSingletonType(
689 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, F &&callback)
692 QQmlPrivate::RegisterSingletonType api = {
695 QTypeRevision::fromVersion(versionMajor, versionMinor),
697 std::forward<F>(callback),
702 QTypeRevision::zero()
705 return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api);
710int qmlRegisterSingletonType(
711 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName,
712 std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)
714template<
typename T,
typename F,
typename std::enable_if<std::is_convertible<F, std::function<QObject *(QQmlEngine *, QJSEngine *)>>::value,
void>::type* =
nullptr>
715int qmlRegisterSingletonType(
716 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, F &&callback)
719 QQmlPrivate::RegisterSingletonType api = {
722 QTypeRevision::fromVersion(versionMajor, versionMinor),
725 std::forward<F>(callback),
726 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
727 QQmlPrivate::QmlMetaType<T>::self(),
729 QTypeRevision::zero()
732 return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api);
736int qmlRegisterSingletonInstance(
const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, QObject *cppObject)
739inline auto qmlRegisterSingletonInstance(
const char *uri,
int versionMajor,
int versionMinor,
740 const char *typeName, T *cppObject) ->
typename std::enable_if<std::is_base_of<QObject, T>::value,
int>::type
743 QQmlPrivate::SingletonInstanceFunctor registrationFunctor;
744 registrationFunctor.m_object = cppObject;
745 return qmlRegisterSingletonType<T>(uri, versionMajor, versionMinor, typeName, registrationFunctor);
748inline int qmlRegisterSingletonType(
const QUrl &url,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
750 if (url.isRelative()) {
752 qWarning(
"qmlRegisterSingletonType requires absolute URLs.");
756 QQmlPrivate::RegisterCompositeSingletonType type = {
760 QTypeRevision::fromVersion(versionMajor, versionMinor),
764 return QQmlPrivate::qmlregister(QQmlPrivate::CompositeSingletonRegistration, &type);
767inline int qmlRegisterType(
const QUrl &url,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
769 if (url.isRelative()) {
771 qWarning(
"qmlRegisterType requires absolute URLs.");
775 QQmlPrivate::RegisterCompositeType type = {
779 QTypeRevision::fromVersion(versionMajor, versionMinor),
783 return QQmlPrivate::qmlregister(QQmlPrivate::CompositeRegistration, &type);
786template<
typename Container>
787inline int qmlRegisterAnonymousSequentialContainer(
const char *uri,
int versionMajor)
789 static_assert(!std::is_abstract_v<Container>,
790 "It is not possible to register an abstract container with qmlRegisterAnonymousSequentialContainer.");
792 QQmlPrivate::RegisterSequentialContainer type = {
795 QTypeRevision::fromMajorVersion(versionMajor),
797 QMetaType::fromType<Container>(),
798 QMetaSequence::fromContainer<Container>(),
799 QTypeRevision::zero()
802 return QQmlPrivate::qmlregister(QQmlPrivate::SequentialContainerRegistration, &type);
805template<
class T,
class Resolved,
class Extended,
bool Singleton,
bool Interface,
bool Sequence,
bool Uncreatable>
806struct QmlTypeAndRevisionsRegistration;
808template<
class T,
class Resolved,
class Extended>
811 const QMetaObject *extension)
813#if QT_DEPRECATED_SINCE(6
, 4
)
815 if constexpr (!QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
816 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::UnconstructibleType,
817 QMetaType::fromType<Resolved>());
820 if constexpr (!std::is_base_of_v<QObject, Resolved>
821 && QQmlTypeInfo<T>::hasAttachedProperties) {
822 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::NonQObjectWithAtached,
823 QMetaType::fromType<Resolved>());
826 static_assert(QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors(),
827 "This type is neither a default constructible QObject, nor a default- "
828 "and copy-constructible Q_GADGET, nor marked as uncreatable.\n"
829 "You should not use it as a QML type.");
830 static_assert(std::is_base_of_v<QObject, Resolved>
831 || !QQmlTypeInfo<Resolved>::hasAttachedProperties);
833 QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
834 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
835 qmlTypeIds, extension);
839template<
class T,
class Resolved,
class Extended>
840struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
false,
false,
false,
true> {
841 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
842 const QMetaObject *extension)
844#if QT_DEPRECATED_SINCE(6
, 4
)
846 if constexpr (!std::is_base_of_v<QObject, Resolved>) {
847 if constexpr (!QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
848 QQmlPrivate::qmlRegistrationWarning(
849 QQmlPrivate::UnconstructibleType, QMetaType::fromType<Resolved>());
851 if constexpr (QQmlTypeInfo<Resolved>::hasAttachedProperties) {
852 QQmlPrivate::qmlRegistrationWarning(
853 QQmlPrivate::NonQObjectWithAtached, QMetaType::fromType<Resolved>());
856#elif QT_DEPRECATED_SINCE(6
, 10
)
857 static_assert(std::is_base_of_v<QObject, Resolved>
858 || !QQmlTypeInfo<Resolved>::hasAttachedProperties);
861 if constexpr (!std::is_base_of_v<QObject, Resolved>
862 && !QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
863 QQmlPrivate::qmlRegistrationWarning(
864 QQmlPrivate::UnconstructibleType, QMetaType::fromType<Resolved>());
867 static_assert(std::is_base_of_v<QObject, Resolved>
868 || (QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()
869 && !QQmlTypeInfo<Resolved>::hasAttachedProperties));
871 QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
872 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
873 qmlTypeIds, extension);
877template<
class T,
class Resolved>
878struct QmlTypeAndRevisionsRegistration<T, Resolved,
void,
false,
false,
true,
true> {
879 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
883 QQmlPrivate::qmlRegisterSequenceAndRevisions<Resolved>(
884 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
889template<
class T,
class Resolved,
class Extended>
890struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
true,
false,
false,
false> {
891 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
892 const QMetaObject *extension)
894#if QT_DEPRECATED_SINCE(6
, 4
)
896 if constexpr (QQmlPrivate::singletonConstructionMode<Resolved, T>()
897 == QQmlPrivate::SingletonConstructionMode::None) {
898 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::UnconstructibleSingleton,
899 QMetaType::fromType<Resolved>());
902 static_assert(QQmlPrivate::singletonConstructionMode<Resolved, T>()
903 != QQmlPrivate::SingletonConstructionMode::None,
904 "A singleton needs either a default constructor or, when adding a default "
905 "constructor is infeasible, a public static "
906 "create(QQmlEngine *, QJSEngine *) method");
909 QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved, Extended, T>(
910 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
911 qmlTypeIds, extension);
915template<
class T,
class Resolved,
class Extended>
916struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
true,
false,
false,
true> {
917 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
918 const QMetaObject *extension)
921 QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved, Extended, T>(
922 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
923 qmlTypeIds, extension);
927template<
class T,
class Resolved>
928struct QmlTypeAndRevisionsRegistration<T, Resolved,
void,
false,
true,
false,
false> {
929 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
932 const int id = qmlRegisterInterface<Resolved>(uri, versionMajor);
934 qmlTypeIds->append(id);
938template<
typename... T>
941 (QmlTypeAndRevisionsRegistration<
942 T,
typename QQmlPrivate::QmlResolved<T>::Type,
943 typename QQmlPrivate::QmlExtended<T>::Type,
944 QQmlPrivate::QmlSingleton<T>::Value,
945 QQmlPrivate::QmlInterface<T>::Value,
946 QQmlPrivate::QmlSequence<T>::Value,
947 QQmlPrivate::QmlUncreatable<T>::Value || QQmlPrivate::QmlAnonymous<T>::Value>
948 ::registerTypeAndRevisions(uri, versionMajor, qmlTypeIds,
949 QQmlPrivate::QmlExtendedNamespace<T>::metaObject()), ...);
953 const char *uri,
int versionMajor,
954 QList<
int> *qmlTypeIds,
955 const QMetaObject *classInfoMetaObject,
956 const QMetaObject *extensionMetaObject)
958 QQmlPrivate::RegisterTypeAndRevisions type = {
968 QTypeRevision::fromMajorVersion(versionMajor),
971 (classInfoMetaObject ? classInfoMetaObject : metaObject),
983 &qmlCreateCustomParser<
void>,
990 qmlregister(QQmlPrivate::TypeAndRevisionsRegistration, &type);
994 const char *uri,
int versionMajor,
995 QList<
int> *qmlTypeIds =
nullptr,
996 const QMetaObject *classInfoMetaObject =
nullptr)
998 qmlRegisterNamespaceAndRevisions(metaObject, uri, versionMajor, qmlTypeIds,
999 classInfoMetaObject,
nullptr);
1002template<
typename Enum>
1005 const QMetaType metaType = QMetaType::fromType<Enum>();
1012 if constexpr (QtPrivate::IsQEnumHelper<Enum>::Value)
1015 QMetaType::registerNormalizedTypedef(name, metaType);
1018int 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
Combined button and popup list for selecting options.
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)