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/qversionnumber.h>
17#define QML_VERSION 0x020000
18#define QML_VERSION_STR "2.0"
20#define QML_DECLARE_TYPE(TYPE)
21 Q_DECLARE_METATYPE(TYPE*)
22 Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)
24#define QML_DECLARE_TYPE_HASMETATYPE(TYPE)
25 Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)
27#define QML_DECLARE_INTERFACE(INTERFACE)
30#define QML_DECLARE_INTERFACE_HASMETATYPE(INTERFACE)
34 QML_HAS_ATTACHED_PROPERTIES = 0x01
37#define QML_DECLARE_TYPEINFO(TYPE, FLAGS) QT_BEGIN_NAMESPACE
41{public
44 hasAttachedProperties = (((FLAGS) & QML_HAS_ATTACHED_PROPERTIES) == QML_HAS_ATTACHED_PROPERTIES)
46};QT_END_NAMESPACE
59 QQmlPrivate::RegisterType type = {
60 QQmlPrivate::RegisterType::CurrentVersion,
61 QQmlPrivate::QmlMetaType<T>::self(),
62 QQmlPrivate::QmlMetaType<T>::list(),
66 QQmlPrivate::ValueType<T,
void>::create,
68 uri, QTypeRevision::fromVersion(versionMajor, 0),
nullptr,
69 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
71 QQmlPrivate::attachedPropertiesFunc<T>(),
72 QQmlPrivate::attachedPropertiesMetaObject<T>(),
74 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
75 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
76 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
81 QTypeRevision::zero(),
82 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
83 QQmlPrivate::ValueTypeCreationMethod::None,
86 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
90template<
typename T,
int metaObjectRevisionMinor>
93 QQmlPrivate::RegisterType type = {
94 QQmlPrivate::RegisterType::CurrentVersion,
95 QQmlPrivate::QmlMetaType<T>::self(),
96 QQmlPrivate::QmlMetaType<T>::list(),
101 QQmlPrivate::ValueType<T,
void>::create,
104 QTypeRevision::fromVersion(versionMajor, 0),
106 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
108 QQmlPrivate::attachedPropertiesFunc<T>(),
109 QQmlPrivate::attachedPropertiesMetaObject<T>(),
111 QQmlPrivate::StaticCastSelector<T, QQmlParserStatus>::cast(),
112 QQmlPrivate::StaticCastSelector<T, QQmlPropertyValueSource>::cast(),
113 QQmlPrivate::StaticCastSelector<T, QQmlPropertyValueInterceptor>::cast(),
119 QTypeRevision::fromMinorVersion(metaObjectRevisionMinor),
120 QQmlPrivate::StaticCastSelector<T, QQmlFinalizerHook>::cast(),
121 QQmlPrivate::ValueTypeCreationMethod::None,
124 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
132 QQmlPrivate::qmlRegisterTypeAndRevisions<T,
void>(
133 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
nullptr,
140 QML_NAMED_ELEMENT(TypeNotAvailable)
145int Q_QML_EXPORT qmlRegisterTypeNotAvailable(
const char *uri,
int versionMajor,
int versionMinor,
146 const char *qmlName,
const QString &message);
149int qmlRegisterUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
151 QQmlPrivate::RegisterType type = {
152 QQmlPrivate::RegisterType::CurrentVersion,
153 QQmlPrivate::QmlMetaType<T>::self(),
154 QQmlPrivate::QmlMetaType<T>::list(),
159 QQmlPrivate::ValueType<T,
void>::create,
161 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
162 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
164 QQmlPrivate::attachedPropertiesFunc<T>(),
165 QQmlPrivate::attachedPropertiesMetaObject<T>(),
167 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
168 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
169 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
174 QTypeRevision::zero(),
175 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
176 QQmlPrivate::ValueTypeCreationMethod::None,
179 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
182template<
typename T,
int metaObjectRevision>
183int qmlRegisterUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
185 QQmlPrivate::RegisterType type = {
186 QQmlPrivate::RegisterType::CurrentVersion,
187 QQmlPrivate::QmlMetaType<T>::self(),
188 QQmlPrivate::QmlMetaType<T>::list(),
193 QQmlPrivate::ValueType<T,
void>::create,
195 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
196 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
198 QQmlPrivate::attachedPropertiesFunc<T>(),
199 QQmlPrivate::attachedPropertiesMetaObject<T>(),
201 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
202 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
203 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
208 QTypeRevision::fromMinorVersion(metaObjectRevision),
209 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
210 QQmlPrivate::ValueTypeCreationMethod::None,
213 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
216template<
typename T,
typename E>
217int qmlRegisterExtendedUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
219 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
220 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
222 attached = QQmlPrivate::attachedPropertiesFunc<T>();
223 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
226 QQmlPrivate::RegisterType type = {
227 QQmlPrivate::RegisterType::CurrentVersion,
228 QQmlPrivate::QmlMetaType<T>::self(),
229 QQmlPrivate::QmlMetaType<T>::list(),
234 QQmlPrivate::ValueType<T, E>::create,
236 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
237 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
242 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
243 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
244 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
246 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
249 QTypeRevision::zero(),
250 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
251 QQmlPrivate::ValueTypeCreationMethod::None,
254 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
257template<
typename T,
typename E,
int metaObjectRevision>
258int qmlRegisterExtendedUncreatableType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason)
260 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
261 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
263 attached = QQmlPrivate::attachedPropertiesFunc<T>();
264 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
267 QQmlPrivate::RegisterType type = {
268 QQmlPrivate::RegisterType::CurrentVersion,
269 QQmlPrivate::QmlMetaType<T>::self(),
270 QQmlPrivate::QmlMetaType<T>::list(),
275 QQmlPrivate::ValueType<T, E>::create,
277 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
278 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
283 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
284 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
285 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
287 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
290 QTypeRevision::fromMinorVersion(metaObjectRevision),
291 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
292 QQmlPrivate::ValueTypeCreationMethod::None,
295 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
298Q_QML_EXPORT
int qmlRegisterUncreatableMetaObject(
const QMetaObject &staticMetaObject,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName,
const QString& reason);
301int qmlRegisterType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
303 static_assert(!std::is_abstract_v<T>,
304 "It is not possible to register an abstract type with qmlRegisterType. "
305 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
307 QQmlPrivate::RegisterType type = {
308 QQmlPrivate::RegisterType::CurrentVersion,
309 QQmlPrivate::QmlMetaType<T>::self(),
310 QQmlPrivate::QmlMetaType<T>::list(),
311 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
313 QQmlPrivate::ValueType<T,
void>::create,
315 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
316 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
318 QQmlPrivate::attachedPropertiesFunc<T>(),
319 QQmlPrivate::attachedPropertiesMetaObject<T>(),
321 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
322 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
323 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
328 QTypeRevision::zero(),
329 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
330 QQmlPrivate::ValueTypeCreationMethod::None,
333 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
336template<
typename T,
int metaObjectRevision>
337int qmlRegisterType(
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
339 static_assert(!std::is_abstract_v<T>,
340 "It is not possible to register an abstract type with qmlRegisterType. "
341 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
343 QQmlPrivate::RegisterType type = {
344 QQmlPrivate::RegisterType::CurrentVersion,
345 QQmlPrivate::QmlMetaType<T>::self(),
346 QQmlPrivate::QmlMetaType<T>::list(),
347 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
349 QQmlPrivate::ValueType<T,
void>::create,
351 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
352 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
354 QQmlPrivate::attachedPropertiesFunc<T>(),
355 QQmlPrivate::attachedPropertiesMetaObject<T>(),
357 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
358 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
359 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
364 QTypeRevision::fromMinorVersion(metaObjectRevision),
365 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
366 QQmlPrivate::ValueTypeCreationMethod::None,
369 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
372template<
typename T,
int metaObjectRevision>
375 QQmlPrivate::RegisterType type = {
376 QQmlPrivate::RegisterType::CurrentVersion,
377 QQmlPrivate::QmlMetaType<T>::self(),
378 QQmlPrivate::QmlMetaType<T>::list(),
379 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
381 QQmlPrivate::ValueType<T,
void>::create,
383 uri, QTypeRevision::fromVersion(versionMajor, versionMinor),
nullptr,
384 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
386 QQmlPrivate::attachedPropertiesFunc<T>(),
387 QQmlPrivate::attachedPropertiesMetaObject<T>(),
389 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
390 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
391 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
396 QTypeRevision::fromMinorVersion(metaObjectRevision),
397 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
398 QQmlPrivate::ValueTypeCreationMethod::None,
401 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
404template<
typename T,
typename E>
407 static_assert(!std::is_abstract_v<T>,
408 "It is not possible to register an extension to an abstract type with qmlRegisterExtendedType.");
410 static_assert(!std::is_abstract_v<E>,
411 "It is not possible to register an abstract type with qmlRegisterExtendedType. "
412 "Maybe you wanted qmlRegisterExtendedUncreatableType?");
414 QQmlPrivate::RegisterType type = {
415 QQmlPrivate::RegisterType::CurrentVersion,
416 QQmlPrivate::QmlMetaType<T>::self(),
417 QQmlPrivate::QmlMetaType<T>::list(),
422 QQmlPrivate::ValueType<T, E>::create,
424 uri, QTypeRevision::fromVersion(versionMajor, 0),
nullptr,
425 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
427 QQmlPrivate::attachedPropertiesFunc<T>(),
428 QQmlPrivate::attachedPropertiesMetaObject<T>(),
430 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
431 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
432 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
434 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
437 QTypeRevision::zero(),
438 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
439 QQmlPrivate::ValueTypeCreationMethod::None,
442 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
445template<
typename T,
typename E>
449 static_assert(!std::is_abstract_v<T>,
450 "It is not possible to register an extension to an abstract type with qmlRegisterExtendedType.");
452 static_assert(!std::is_abstract_v<E>,
453 "It is not possible to register an abstract type with qmlRegisterExtendedType. "
454 "Maybe you wanted qmlRegisterExtendedUncreatableType?");
456 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
457 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
459 attached = QQmlPrivate::attachedPropertiesFunc<T>();
460 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
463 QQmlPrivate::RegisterType type = {
464 QQmlPrivate::RegisterType::CurrentVersion,
465 QQmlPrivate::QmlMetaType<T>::self(),
466 QQmlPrivate::QmlMetaType<T>::list(),
467 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
469 QQmlPrivate::ValueType<T, E>::create,
471 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
472 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
477 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
478 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
479 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
481 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
484 QTypeRevision::zero(),
485 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
486 QQmlPrivate::ValueTypeCreationMethod::None,
489 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
495 QQmlPrivate::RegisterInterface qmlInterface = {
499 QMetaType::fromType<T *>(),
500 QMetaType::fromType<QQmlListProperty<T> >(),
501 qobject_interface_iid<T *>(),
504 QTypeRevision::fromVersion(versionMajor, 0)
507 return QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface);
512 const char *qmlName, QQmlCustomParser *parser)
514 static_assert(!std::is_abstract_v<T>,
515 "It is not possible to register an abstract type with qmlRegisterCustomType. "
516 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
518 QQmlPrivate::RegisterType type = {
519 QQmlPrivate::RegisterType::CurrentVersion,
520 QQmlPrivate::QmlMetaType<T>::self(),
521 QQmlPrivate::QmlMetaType<T>::list(),
522 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
524 QQmlPrivate::ValueType<T,
void>::create,
526 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
527 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
529 QQmlPrivate::attachedPropertiesFunc<T>(),
530 QQmlPrivate::attachedPropertiesMetaObject<T>(),
532 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
533 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
534 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
539 QTypeRevision::zero(),
540 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
541 QQmlPrivate::ValueTypeCreationMethod::None,
544 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
547template<
typename T,
int metaObjectRevision>
549 const char *qmlName, QQmlCustomParser *parser)
551 static_assert(!std::is_abstract_v<T>,
552 "It is not possible to register an abstract type with qmlRegisterCustomType. "
553 "Maybe you wanted qmlRegisterUncreatableType or qmlRegisterInterface?");
555 QQmlPrivate::RegisterType type = {
556 QQmlPrivate::RegisterType::CurrentVersion,
557 QQmlPrivate::QmlMetaType<T>::self(),
558 QQmlPrivate::QmlMetaType<T>::list(),
559 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
561 QQmlPrivate::ValueType<T,
void>::create,
563 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
564 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
566 QQmlPrivate::attachedPropertiesFunc<T>(),
567 QQmlPrivate::attachedPropertiesMetaObject<T>(),
569 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
570 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
571 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
576 QTypeRevision::fromMinorVersion(metaObjectRevision),
577 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
578 QQmlPrivate::ValueTypeCreationMethod::None,
581 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
584template<
typename T,
typename E>
586 const char *qmlName, QQmlCustomParser *parser)
588 static_assert(!std::is_abstract_v<T>,
589 "It is not possible to register an extension to an abstract type with qmlRegisterCustomExtendedType.");
591 static_assert(!std::is_abstract_v<E>,
592 "It is not possible to register an abstract type with qmlRegisterCustomExtendedType.");
594 QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
595 const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
597 attached = QQmlPrivate::attachedPropertiesFunc<T>();
598 attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<T>();
601 QQmlPrivate::RegisterType type = {
602 QQmlPrivate::RegisterType::CurrentVersion,
603 QQmlPrivate::QmlMetaType<T>::self(),
604 QQmlPrivate::QmlMetaType<T>::list(),
605 sizeof(T), QQmlPrivate::Constructors<T>::createInto,
nullptr,
607 QQmlPrivate::ValueType<T, E>::create,
609 uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName,
610 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
615 QQmlPrivate::StaticCastSelector<T,QQmlParserStatus>::cast(),
616 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueSource>::cast(),
617 QQmlPrivate::StaticCastSelector<T,QQmlPropertyValueInterceptor>::cast(),
619 QQmlPrivate::ExtendedType<E>::createParent, QQmlPrivate::ExtendedType<E>::staticMetaObject(),
622 QTypeRevision::zero(),
623 QQmlPrivate::StaticCastSelector<T,QQmlFinalizerHook>::cast(),
624 QQmlPrivate::ValueTypeCreationMethod::None,
627 return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type);
638Q_QML_EXPORT QQmlAttachedPropertiesFunc qmlAttachedPropertiesFunction(QObject *,
639 const QMetaObject *);
640Q_QML_EXPORT QObject *qmlAttachedPropertiesObject(QObject *, QQmlAttachedPropertiesFunc func,
641 bool createIfMissing =
true);
670 if (
const auto func = QQmlPrivate::attachedPropertiesFunc<T>())
671 return qmlAttachedPropertiesObject(
const_cast<QObject *>(obj), func, create);
675 static const auto func = qmlAttachedPropertiesFunction(
nullptr, &T::staticMetaObject);
676 return qmlAttachedPropertiesObject(
const_cast<QObject *>(obj), func, create);
680int qmlRegisterSingletonType(
681 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName,
682 std::function<QJSValue(QQmlEngine *, QJSEngine *)> callback)
684template<
typename F,
typename std::enable_if<std::is_convertible<F, std::function<QJSValue(QQmlEngine *, QJSEngine *)>>::value,
void>::type* =
nullptr>
685int qmlRegisterSingletonType(
686 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, F &&callback)
689 QQmlPrivate::RegisterSingletonType api = {
692 QTypeRevision::fromVersion(versionMajor, versionMinor),
694 std::forward<F>(callback),
699 QTypeRevision::zero()
702 return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api);
707int qmlRegisterSingletonType(
708 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName,
709 std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)
711template<
typename T,
typename F,
typename std::enable_if<std::is_convertible<F, std::function<QObject *(QQmlEngine *, QJSEngine *)>>::value,
void>::type* =
nullptr>
712int qmlRegisterSingletonType(
713 const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, F &&callback)
716 QQmlPrivate::RegisterSingletonType api = {
719 QTypeRevision::fromVersion(versionMajor, versionMinor),
722 std::forward<F>(callback),
723 QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
724 QQmlPrivate::QmlMetaType<T>::self(),
726 QTypeRevision::zero()
729 return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api);
733int qmlRegisterSingletonInstance(
const char *uri,
int versionMajor,
int versionMinor,
const char *typeName, QObject *cppObject)
736inline auto qmlRegisterSingletonInstance(
const char *uri,
int versionMajor,
int versionMinor,
737 const char *typeName, T *cppObject) ->
typename std::enable_if<std::is_base_of<QObject, T>::value,
int>::type
740 QQmlPrivate::SingletonInstanceFunctor registrationFunctor;
741 registrationFunctor.m_object = cppObject;
742 return qmlRegisterSingletonType<T>(uri, versionMajor, versionMinor, typeName, registrationFunctor);
745inline int qmlRegisterSingletonType(
const QUrl &url,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
747 if (url.isRelative()) {
749 qWarning(
"qmlRegisterSingletonType requires absolute URLs.");
753 QQmlPrivate::RegisterCompositeSingletonType type = {
757 QTypeRevision::fromVersion(versionMajor, versionMinor),
761 return QQmlPrivate::qmlregister(QQmlPrivate::CompositeSingletonRegistration, &type);
764inline int qmlRegisterType(
const QUrl &url,
const char *uri,
int versionMajor,
int versionMinor,
const char *qmlName)
766 if (url.isRelative()) {
768 qWarning(
"qmlRegisterType requires absolute URLs.");
772 QQmlPrivate::RegisterCompositeType type = {
776 QTypeRevision::fromVersion(versionMajor, versionMinor),
780 return QQmlPrivate::qmlregister(QQmlPrivate::CompositeRegistration, &type);
783template<
typename Container>
784inline int qmlRegisterAnonymousSequentialContainer(
const char *uri,
int versionMajor)
786 static_assert(!std::is_abstract_v<Container>,
787 "It is not possible to register an abstract container with qmlRegisterAnonymousSequentialContainer.");
789 QQmlPrivate::RegisterSequentialContainer type = {
792 QTypeRevision::fromMajorVersion(versionMajor),
794 QMetaType::fromType<Container>(),
795 QMetaSequence::fromContainer<Container>(),
796 QTypeRevision::zero()
799 return QQmlPrivate::qmlregister(QQmlPrivate::SequentialContainerRegistration, &type);
802template<
class T,
class Resolved,
class Extended,
bool Singleton,
bool Interface,
bool Sequence,
bool Uncreatable>
803struct QmlTypeAndRevisionsRegistration;
805template<
class T,
class Resolved,
class Extended>
808 const QMetaObject *extension)
810#if QT_DEPRECATED_SINCE(6
, 4
)
812 if constexpr (!QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
813 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::UnconstructibleType,
814 QMetaType::fromType<Resolved>());
817 if constexpr (!std::is_base_of_v<QObject, Resolved>
818 && QQmlTypeInfo<T>::hasAttachedProperties) {
819 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::NonQObjectWithAtached,
820 QMetaType::fromType<Resolved>());
823 static_assert(QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors(),
824 "This type is neither a default constructible QObject, nor a default- "
825 "and copy-constructible Q_GADGET, nor marked as uncreatable.\n"
826 "You should not use it as a QML type.");
827 static_assert(std::is_base_of_v<QObject, Resolved>
828 || !QQmlTypeInfo<Resolved>::hasAttachedProperties);
830 QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
831 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
832 qmlTypeIds, extension);
836template<
class T,
class Resolved,
class Extended>
837struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
false,
false,
false,
true> {
838 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
839 const QMetaObject *extension)
841#if QT_DEPRECATED_SINCE(6
, 4
)
843 if constexpr (!std::is_base_of_v<QObject, Resolved>) {
844 if constexpr (!QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
845 QQmlPrivate::qmlRegistrationWarning(
846 QQmlPrivate::UnconstructibleType, QMetaType::fromType<Resolved>());
848 if constexpr (QQmlTypeInfo<Resolved>::hasAttachedProperties) {
849 QQmlPrivate::qmlRegistrationWarning(
850 QQmlPrivate::NonQObjectWithAtached, QMetaType::fromType<Resolved>());
853#elif QT_DEPRECATED_SINCE(6
, 10
)
854 static_assert(std::is_base_of_v<QObject, Resolved>
855 || !QQmlTypeInfo<Resolved>::hasAttachedProperties);
858 if constexpr (!std::is_base_of_v<QObject, Resolved>
859 && !QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()) {
860 QQmlPrivate::qmlRegistrationWarning(
861 QQmlPrivate::UnconstructibleType, QMetaType::fromType<Resolved>());
864 static_assert(std::is_base_of_v<QObject, Resolved>
865 || (QQmlPrivate::QmlMetaType<Resolved>::hasAcceptableCtors()
866 && !QQmlTypeInfo<Resolved>::hasAttachedProperties));
868 QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
869 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
870 qmlTypeIds, extension);
874template<
class T,
class Resolved>
875struct QmlTypeAndRevisionsRegistration<T, Resolved,
void,
false,
false,
true,
true> {
876 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
880 QQmlPrivate::qmlRegisterSequenceAndRevisions<Resolved>(
881 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
886template<
class T,
class Resolved,
class Extended>
887struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
true,
false,
false,
false> {
888 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
889 const QMetaObject *extension)
891#if QT_DEPRECATED_SINCE(6
, 4
)
893 if constexpr (QQmlPrivate::singletonConstructionMode<Resolved, T>()
894 == QQmlPrivate::SingletonConstructionMode::None) {
895 QQmlPrivate::qmlRegistrationWarning(QQmlPrivate::UnconstructibleSingleton,
896 QMetaType::fromType<Resolved>());
899 static_assert(QQmlPrivate::singletonConstructionMode<Resolved, T>()
900 != QQmlPrivate::SingletonConstructionMode::None,
901 "A singleton needs either a default constructor or, when adding a default "
902 "constructor is infeasible, a public static "
903 "create(QQmlEngine *, QJSEngine *) method");
906 QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved, Extended, T>(
907 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
908 qmlTypeIds, extension);
912template<
class T,
class Resolved,
class Extended>
913struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended,
true,
false,
false,
true> {
914 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
915 const QMetaObject *extension)
918 QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved, Extended, T>(
919 uri, versionMajor, QQmlPrivate::StaticMetaObject<T>::staticMetaObject(),
920 qmlTypeIds, extension);
924template<
class T,
class Resolved>
925struct QmlTypeAndRevisionsRegistration<T, Resolved,
void,
false,
true,
false,
false> {
926 static void registerTypeAndRevisions(
const char *uri,
int versionMajor, QList<
int> *qmlTypeIds,
929 const int id = qmlRegisterInterface<Resolved>(uri, versionMajor);
931 qmlTypeIds->append(id);
935template<
typename... T>
938 (QmlTypeAndRevisionsRegistration<
939 T,
typename QQmlPrivate::QmlResolved<T>::Type,
940 typename QQmlPrivate::QmlExtended<T>::Type,
941 QQmlPrivate::QmlSingleton<T>::Value,
942 QQmlPrivate::QmlInterface<T>::Value,
943 QQmlPrivate::QmlSequence<T>::Value,
944 QQmlPrivate::QmlUncreatable<T>::Value || QQmlPrivate::QmlAnonymous<T>::Value>
945 ::registerTypeAndRevisions(uri, versionMajor, qmlTypeIds,
946 QQmlPrivate::QmlExtendedNamespace<T>::metaObject()), ...);
950 const char *uri,
int versionMajor,
951 QList<
int> *qmlTypeIds,
952 const QMetaObject *classInfoMetaObject,
953 const QMetaObject *extensionMetaObject)
955 QQmlPrivate::RegisterTypeAndRevisions type = {
965 QTypeRevision::fromMajorVersion(versionMajor),
968 (classInfoMetaObject ? classInfoMetaObject : metaObject),
980 &qmlCreateCustomParser<
void>,
987 qmlregister(QQmlPrivate::TypeAndRevisionsRegistration, &type);
991 const char *uri,
int versionMajor,
992 QList<
int> *qmlTypeIds =
nullptr,
993 const QMetaObject *classInfoMetaObject =
nullptr)
995 qmlRegisterNamespaceAndRevisions(metaObject, uri, versionMajor, qmlTypeIds,
996 classInfoMetaObject,
nullptr);
999template<
typename Enum>
1002 const QMetaType metaType = QMetaType::fromType<Enum>();
1009 if constexpr (QtPrivate::IsQEnumHelper<Enum>::Value)
1012 QMetaType::registerNormalizedTypedef(name, metaType);
1015int 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)