From 62c2061a501563e7f2929c5883f01955af0f2fc1 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 16 Aug 2012 02:19:56 +0200 Subject: Add automatic metatype registration for Q_PROPERTY types. In Qt 4, the user needs to call qRegisterMetaType if the property could otherwise be read before the type is registered with the metatype system. This patch makes that unnecessary and automatic by registering it when the first read indicates that it is not yet registered instead or when QMetaProperty::userType is called before it is registered. The types which are automatically registered exclude the built-in types, which do not need to be registered, and include metatypes which are automatically declared, such as pointers to QObject derived types and containers of existing metatypes. Change-Id: I0a06d8efdcb64121618e2378366d0142fa0771f5 Reviewed-by: Kent Hansen --- src/tools/moc/generator.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/tools/moc/generator.h') diff --git a/src/tools/moc/generator.h b/src/tools/moc/generator.h index 8ebc00b100..873681ab88 100644 --- a/src/tools/moc/generator.h +++ b/src/tools/moc/generator.h @@ -52,9 +52,10 @@ class Generator ClassDef *cdef; QVector meta_data; public: - Generator(ClassDef *classDef, const QList &metaTypes, FILE *outfile = 0); + Generator(ClassDef *classDef, const QList &metaTypes, const QSet &knownQObjectClasses, FILE *outfile = 0); void generateCode(); private: + bool registerableMetaType(const QByteArray &propertyType); void registerClassInfoStrings(); void generateClassInfos(); void registerFunctionStrings(const QList &list); @@ -70,12 +71,14 @@ private: void generateStaticMetacall(); void generateSignal(FunctionDef *def, int index); void generatePluginMetaData(); + QMultiMap automaticPropertyMetaTypesHelper(); void strreg(const QByteArray &); // registers a string int stridx(const QByteArray &); // returns a string's id QList strings; QByteArray purestSuperClass; QList metaTypes; + QSet knownQObjectClasses; }; QT_END_NAMESPACE -- cgit v1.2.3