diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2013-01-03 01:22:47 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-07 12:06:00 +0100 |
commit | 21d607c81af0cd285e9bb3869ac3cd18358f1c8f (patch) | |
tree | 9ab2a2d135084474aa23cfc45871573c2b13196e /src/testlib/qsignalspy.h | |
parent | 6769e0783ac0fc54aa542232b24166afc082412e (diff) |
Automatically register method types in QSignalSpy.
Change-Id: I3655291dca6dbd3d8d09ee835b85983caa911b64
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Diffstat (limited to 'src/testlib/qsignalspy.h')
-rw-r--r-- | src/testlib/qsignalspy.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h index b8e542a3c9..904fe81cf0 100644 --- a/src/testlib/qsignalspy.h +++ b/src/testlib/qsignalspy.h @@ -97,7 +97,7 @@ public: return; } sig = ba; - initArgs(mo->method(sigIndex)); + initArgs(mo->method(sigIndex), obj); } inline bool isValid() const { return !sig.isEmpty(); } @@ -131,10 +131,23 @@ public: private: void initArgs(const QMetaMethod &member) { + initArgs(member, 0); + } + + void initArgs(const QMetaMethod &member, const QObject *obj) + { const QList<QByteArray> params = member.parameterTypes(); args.reserve(params.size()); for (int i = 0; i < params.count(); ++i) { - const int tp = QMetaType::type(params.at(i).constData()); + int tp = QMetaType::type(params.at(i).constData()); + if (tp == QMetaType::UnknownType && obj) { + void *argv[] = { &tp, &i }; + QMetaObject::metacall(const_cast<QObject*>(obj), + QMetaObject::RegisterMethodArgumentMetaType, + member.methodIndex(), argv); + if (tp == -1) + tp = QMetaType::UnknownType; + } if (tp == QMetaType::UnknownType) { Q_ASSERT(tp != QMetaType::Void); // void parameter => metaobject is corrupt qWarning("Don't know how to handle '%s', use qRegisterMetaType to register it.", |