From bcd477e0bc48bb028193d7707d1ecfbd61b5bdc1 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 24 Apr 2012 15:01:47 +0200 Subject: Introduce QObject::isSignalConnected(QMetaMethod) This is much more performant than calling QObject::receivers(const char*) Can be used instead of connectNotify in some cases. Change-Id: I19e0933f678f171f515d9a0f69f0ad4fb7d894b4 Reviewed-by: Kent Hansen --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'tests/auto/corelib') diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 54704bf5d9..e5da03c890 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -3774,6 +3774,7 @@ public: void tst_QObject::isSignalConnected() { ManySignals o; + const QMetaObject *meta = o.metaObject(); o.rec = 0; #ifdef QT_BUILD_INTERNAL QObjectPrivate *priv = QObjectPrivate::get(&o); @@ -3784,6 +3785,13 @@ void tst_QObject::isSignalConnected() QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig29()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig60()"))); #endif + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("destroyed()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig00()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig05()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig15()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig29()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig60()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig69()")))); QObject::connect(&o, SIGNAL(sig00()), &o, SIGNAL(sig69())); QObject::connect(&o, SIGNAL(sig34()), &o, SIGNAL(sig03())); @@ -3802,6 +3810,18 @@ void tst_QObject::isSignalConnected() QVERIFY(priv->isSignalConnected(priv->signalIndex("sig69()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig18()"))); #endif + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("destroyed()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("destroyed(QObject*)")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig05()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig15()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig29()")))); + + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig00()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig03()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig34()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig69()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig18()")))); + QObject::connect(&o, SIGNAL(sig18()), &o, SIGNAL(sig29())); QObject::connect(&o, SIGNAL(sig29()), &o, SIGNAL(sig62())); @@ -3815,6 +3835,11 @@ void tst_QObject::isSignalConnected() QVERIFY(priv->isSignalConnected(priv->signalIndex("sig69()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig27()"))); #endif + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig18()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig62()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig28()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("sig69()")))); + QVERIFY(!o.isSignalConnected(meta->method(meta->indexOfSignal("sig27()")))); QCOMPARE(o.rec, 0); emit o.sig01(); @@ -3845,6 +3870,12 @@ void tst_QObject::isSignalConnected() QCOMPARE(o.rec, 2); emit o.sig36(); QCOMPARE(o.rec, 2); + + QObject::connect(&o, &QObject::destroyed, qt_noop); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("destroyed()")))); + QVERIFY(o.isSignalConnected(meta->method(meta->indexOfSignal("destroyed(QObject*)")))); + + QVERIFY(!o.isSignalConnected(QMetaMethod())); } void tst_QObject::qMetaObjectConnect() -- cgit v1.2.3