From 21d607c81af0cd285e9bb3869ac3cd18358f1c8f Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 3 Jan 2013 01:22:47 +0100 Subject: Automatically register method types in QSignalSpy. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I3655291dca6dbd3d8d09ee835b85983caa911b64 Reviewed-by: Jędrzej Nowacki --- src/testlib/qsignalspy.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/testlib/qsignalspy.h') 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(); } @@ -130,11 +130,24 @@ public: private: void initArgs(const QMetaMethod &member) + { + initArgs(member, 0); + } + + void initArgs(const QMetaMethod &member, const QObject *obj) { const QList 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(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.", -- cgit v1.2.3