32 :
public QObject,
public QQmlParserStatus
35 Q_INTERFACES(QQmlParserStatus)
37 Q_PROPERTY(QString key READ key WRITE setKey NOTIFY keyChanged FINAL)
42 QObjectRegistryAttachedType(QObject *parent =
nullptr);
43 ~QObjectRegistryAttachedType();
46 void setKey(
const QString &key);
48 void classBegin() override;
49 void componentComplete() override;
56 bool m_qmlSetupInProgress =
false;
57 QPointer<QObjectRegistrySingleton> m_registry;
64 Q_PROPERTY(QString key READ key WRITE setKey NOTIFY keyChanged REQUIRED FINAL)
65 Q_PROPERTY(QObject *target READ target WRITE setTarget NOTIFY targetChanged REQUIRED FINAL)
67 QML_ATTACHED(QObjectRegistryAttachedType)
69 QML_NAMED_ELEMENT(ObjectRegistry)
72 QObjectRegistry(QObject *parent =
nullptr);
75 static QObjectRegistryAttachedType *qmlAttachedProperties(QObject *object);
78 void setKey(
const QString &key);
80 QObject *target()
const;
81 void setTarget(QObject *target);
88 class TargetGuard :
public QQmlGuard<QObject>
91 explicit TargetGuard(QObjectRegistry *owner)
92 : QQmlGuard<QObject>(&TargetGuard::objectDestroyedImpl,
nullptr)
98 static void objectDestroyedImpl(QQmlGuardImpl *guard)
100 TargetGuard *self =
static_cast<TargetGuard *>(guard);
101 emit self->m_owner->targetChanged();
104 QObjectRegistry *m_owner =
nullptr;
108 TargetGuard m_target {
this };
109 QPointer<QObjectRegistrySingleton> m_registry;