From 49bd825a9626eda77fd9e8313e1868bed4c77bff Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 31 Oct 2011 15:22:31 +0100 Subject: moc: support mapping pointers to member functions to indexes This change adds QMetaObject::IndexOfMethod as a parameter to the qt_static_metacall function. It lets the moc generated code return the index of a signal or slot given its pointer to member function This is required to support the new connection syntax Change-Id: I39198c6699b5aa3599d3d282f7ac79b1e3684d33 Reviewed-by: Bradley T. Hughes Reviewed-by: Thiago Macieira --- .../corelib/kernel/qmetaobject/tst_qmetaobject.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp index 2831d9fc34..e68f7e5ed1 100644 --- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp +++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp @@ -174,6 +174,8 @@ private slots: void indexOfMethod_data(); void indexOfMethod(); + void indexOfMethodPMF(); + signals: void value6Changed(); void value7Changed(const QString &); @@ -290,6 +292,7 @@ void tst_QMetaObject::connectSlotsByName() class QtTestObject: public QObject { + friend class tst_QMetaObject; Q_OBJECT public: @@ -1115,6 +1118,25 @@ void tst_QMetaObject::indexOfMethod() QCOMPARE(object->metaObject()->indexOfSignal(name), !isSignal ? -1 : idx); } +void tst_QMetaObject::indexOfMethodPMF() +{ +#define INDEXOFMETHODPMF_HELPER(ObjectType, Name, Arguments) { \ + int idx = -1; \ + void (ObjectType::*signal)Arguments = &ObjectType::Name; \ + void *signal_p = &signal; \ + void *args[] = { &idx, signal_p, 0}; \ + ObjectType::qt_static_metacall(0, QMetaObject::IndexOfMethod, 0, args); \ + QCOMPARE(ObjectType::staticMetaObject.indexOfMethod(QMetaObject::normalizedSignature(#Name #Arguments)), \ + ObjectType::staticMetaObject.methodOffset() + idx); \ + } + + INDEXOFMETHODPMF_HELPER(tst_QMetaObject, value7Changed, (const QString&)) + INDEXOFMETHODPMF_HELPER(tst_QMetaObject, stdSet, ()) + INDEXOFMETHODPMF_HELPER(QtTestObject, sl10, (QString,QString,QString,QString,QString,QString,QString,QString,QString,QString)) + INDEXOFMETHODPMF_HELPER(QtTestObject, sig0, ()) + INDEXOFMETHODPMF_HELPER(QtTestObject, testLongLong, (qint64, quint64)) + INDEXOFMETHODPMF_HELPER(QtTestObject, testReference, (QString&)) +} QTEST_MAIN(tst_QMetaObject) #include "tst_qmetaobject.moc" -- cgit v1.2.3