diff options
author | Keith Gardner <kreios4004@gmail.com> | 2014-04-16 20:43:56 -0500 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-23 22:26:00 +0200 |
commit | 6fc7d76e7309c01a364b0f72d253735366674f29 (patch) | |
tree | dfae10def866703eff8a53b5101162a1a0f5f0d6 /src/testlib/qsignalspy.h | |
parent | eb88aaa3a2aed3235cf837e858f530f6a521349f (diff) |
QSignalSpy: Added template function pointer constructor
Added the function pointer constructor to QSignalSpy to take advantage
of the new connect syntax.
Change-Id: I94218a096c677cdba73e1b2cfa8b9c09bc28145f
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Jason McDonald <macadder1@gmail.com>
Diffstat (limited to 'src/testlib/qsignalspy.h')
-rw-r--r-- | src/testlib/qsignalspy.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h index 72a5df1ed9..a8a776aff0 100644 --- a/src/testlib/qsignalspy.h +++ b/src/testlib/qsignalspy.h @@ -98,6 +98,48 @@ public: initArgs(mo->method(sigIndex), obj); } +#ifdef Q_QDOC + QSignalSpy(const QObject *object, PointerToMemberFunction signal); +#else + template <typename Func> + QSignalSpy(const typename QtPrivate::FunctionPointer<Func>::Object *obj, Func signal0) + : m_waiting(false) + { +#ifdef Q_CC_BOR + const int memberOffset = QObject::staticMetaObject.methodCount(); +#else + static const int memberOffset = QObject::staticMetaObject.methodCount(); +#endif + if (!obj) { + qWarning("QSignalSpy: Cannot spy on a null object"); + return; + } + + if (!signal0) { + qWarning("QSignalSpy: Null signal name is not valid"); + return; + } + + const QMetaObject * const mo = obj->metaObject(); + const QMetaMethod signalMetaMethod = QMetaMethod::fromSignal(signal0); + const int sigIndex = signalMetaMethod.methodIndex(); + if (!signalMetaMethod.isValid() || + signalMetaMethod.methodType() != QMetaMethod::Signal) { + qWarning("QSignalSpy: Not a valid signal: '%s'", + signalMetaMethod.methodSignature().constData()); + return; + } + + if (!QMetaObject::connect(obj, sigIndex, this, memberOffset, + Qt::DirectConnection, 0)) { + qWarning("QSignalSpy: QMetaObject::connect returned false. Unable to connect."); + return; + } + sig = signalMetaMethod.methodSignature(); + initArgs(mo->method(sigIndex), obj); + } +#endif // Q_QDOC + inline bool isValid() const { return !sig.isEmpty(); } inline QByteArray signal() const { return sig; } |