diff options
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qmetatype.cpp | 13 | ||||
-rw-r--r-- | src/corelib/kernel/qmetatype.h | 3 | ||||
-rw-r--r-- | src/corelib/kernel/qmetatype_p.h | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index c81f958e74..154527bbfb 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -669,6 +669,13 @@ void QtMetaTypePrivate::derefAndDestroy(QtPrivate::QMetaTypeInterface *d_ptr) } } +Q_CORE_EXPORT void QtMetaTypePrivate::unsafeUnregister(QtPrivate::QMetaTypeInterface *d_ptr) +{ + if (auto reg = customTypeRegistery()) + reg->unregisterDynamicType(d_ptr->typeId.loadRelaxed()); + d_ptr->typeId = 0; +} + /*! \fn QMetaType::~QMetaType() @@ -1768,6 +1775,12 @@ QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(QT_METATYPE_DECLARE_TEMPLATE_ITER) QT_FOR_EACH_STATIC_CORE_CLASS(QT_METATYPE_DECLARE_TEMPLATE_ITER) QT_FOR_EACH_STATIC_CORE_POINTER(QT_METATYPE_DECLARE_TEMPLATE_ITER) QT_FOR_EACH_STATIC_CORE_TEMPLATE(QT_METATYPE_DECLARE_TEMPLATE_ITER) + +Q_CORE_EXPORT QMetaTypeInterface *QMetaTypeInterface::get(const QMetaType &metatype) +{ + return metatype.d_ptr; +} + #undef QT_METATYPE_DECLARE_TEMPLATE_ITER #endif } diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index b9ab0cbca6..424065d247 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -693,6 +693,7 @@ public: static void unregisterConverterFunction(int from, int to); private: friend class QVariant; + friend class QtPrivate::QMetaTypeInterface; QtPrivate::QMetaTypeInterface *d_ptr = nullptr; }; @@ -2278,6 +2279,8 @@ public: using LegacyRegisterOp = void (*)(); LegacyRegisterOp legacyRegisterOp; + + Q_CORE_EXPORT static QMetaTypeInterface *get(const QMetaType &metatype); }; struct QTypeNormalizer diff --git a/src/corelib/kernel/qmetatype_p.h b/src/corelib/kernel/qmetatype_p.h index 00d57a7e68..6bac442aea 100644 --- a/src/corelib/kernel/qmetatype_p.h +++ b/src/corelib/kernel/qmetatype_p.h @@ -218,6 +218,7 @@ static QtPrivate::QMetaTypeInterface *getInterfaceFromType() return true; void derefAndDestroy(QtPrivate::QMetaTypeInterface *d_ptr); +Q_CORE_EXPORT void unsafeUnregister(QtPrivate::QMetaTypeInterface *d_ptr); } //namespace QtMetaTypePrivate |