aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cppgenerator.cpp23
-rw-r--r--cppgenerator.h1
-rw-r--r--headergenerator.cpp3
3 files changed, 26 insertions, 1 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index 13c849dd4..9d27639ce 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -90,8 +90,11 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl
// headers
s << "// default includes" << endl;
s << "#include <shiboken.h>" << endl;
- if (usePySideExtensions())
+ if (usePySideExtensions()) {
s << "#include <typeresolver.h>\n";
+ if (metaClass->isQObject())
+ s << "#include <signalmanager.h>\n";
+ }
// The multiple inheritance initialization function
// needs the 'set' class from C++ STL.
@@ -154,6 +157,9 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl
writeVirtualMethodNative(s, func);
}
+ if (usePySideExtensions() && metaClass->isQObject())
+ writeMetaObjectMethod(s, metaClass);
+
writeDestructorNative(s, metaClass);
s << endl << "// Target ---------------------------------------------------------" << endl;
@@ -430,6 +436,21 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu
s << '}' << endl << endl;
}
+void CppGenerator::writeMetaObjectMethod(QTextStream& s, const AbstractMetaClass* metaClass)
+{
+ Indentation indentation(INDENT);
+ QString prefix = wrapperName(metaClass) + "::";
+ s << "const QMetaObject* " << wrapperName(metaClass) << "::metaObject() const\n{\n";
+ s << INDENT << "const QMetaObject* qmetaObject = PySide::SignalManager::instance().getMetaObject(this);\n";
+ s << INDENT << "if (!qmetaObject)\n";
+ {
+ Indentation indentation(INDENT);
+ s << INDENT << "qmetaObject = &" << metaClass->qualifiedCppName() << "::staticMetaObject;\n";
+ }
+ s << INDENT << "return qmetaObject;\n";
+ s << "}\n\n";
+}
+
void CppGenerator::writeConstructorWrapper(QTextStream& s, const AbstractMetaFunctionList overloads)
{
OverloadData overloadData(overloads, this);
diff --git a/cppgenerator.h b/cppgenerator.h
index 7857974a7..92039b38d 100644
--- a/cppgenerator.h
+++ b/cppgenerator.h
@@ -45,6 +45,7 @@ private:
void writeConstructorNative(QTextStream& s, const AbstractMetaFunction* func);
void writeDestructorNative(QTextStream& s, const AbstractMetaClass* metaClass);
void writeVirtualMethodNative(QTextStream& s, const AbstractMetaFunction* func);
+ void writeMetaObjectMethod(QTextStream& s, const AbstractMetaClass* metaClass);
void writeConstructorWrapper(QTextStream &s, const AbstractMetaFunctionList overloads);
void writeDestructorWrapper(QTextStream& s, const AbstractMetaClass* metaClass);
diff --git a/headergenerator.cpp b/headergenerator.cpp
index c44bc4302..5d6b55cce 100644
--- a/headergenerator.cpp
+++ b/headergenerator.cpp
@@ -83,6 +83,9 @@ void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* met
foreach (AbstractMetaFunction *func, filterFunctions(metaClass))
writeFunction(s, func);
+ if (usePySideExtensions() && metaClass->isQObject())
+ s << INDENT << "virtual const QMetaObject* metaObject() const;\n";;
+
//destructor
s << INDENT << (metaClass->hasVirtualDestructor() ? "virtual " : "") << "~" << wrapperName << "();" << endl;