summaryrefslogtreecommitdiffstats
path: root/src/testlib/qsignalspy.h
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2013-01-03 01:22:47 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-07 12:06:00 +0100
commit21d607c81af0cd285e9bb3869ac3cd18358f1c8f (patch)
tree9ab2a2d135084474aa23cfc45871573c2b13196e /src/testlib/qsignalspy.h
parent6769e0783ac0fc54aa542232b24166afc082412e (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.h17
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.",