From ba635d7e74472f3a54c0c4686966af46d9035c6f Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 28 Nov 2011 13:05:33 +0100 Subject: [PATCH] Add QObject::objectNameChanged(const QString &objectName) signal This is sent when the object's name changes. tst_moc must be updated since the method count of QObject has changed. The test assumed that there were 4 invokable methods in QObject. The new signal is the 5th, which breaks the test's assumptions. Fix this as well. tst_QObject must be updated since the QObjectPrivate::isSignalConnected() method only supports the first 64 signals. With the addition of this new signal, sig61() in the test becomes the 65th signal, and will always appear connected now. Task-number: QTBUG-13999 (related) Change-Id: Ie87893c71a231fafa7ccf2f16102238a7be8327a Reviewed-by: Stephen Kelly Reviewed-by: Olivier Goffart --- src/corelib/kernel/qobject.cpp | 17 ++++++++++---- src/corelib/kernel/qobject.h | 3 ++- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 2 -- tests/auto/tools/moc/tst_moc.cpp | 28 +++++++++++------------ 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index b1d2463..bdf833b 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -1096,13 +1096,20 @@ QString QObject::objectName() const void QObject::setObjectName(const QString &name) { Q_D(QObject); - bool objectNameChanged = d->declarativeData && d->objectName != name; + if (d->objectName != name) { + d->objectName = name; + if (d->declarativeData) + d->declarativeData->objectNameChanged(d->declarativeData, this); + emit objectNameChanged(d->objectName); + } +} - d->objectName = name; +/*! \fn void QObject::objectNameChanged(const QString &objectName) - if (objectNameChanged) - d->declarativeData->objectNameChanged(d->declarativeData, this); -} + This signal is emitted after the object's name has been changed. The new object name is passed as \a objectName. + + \sa QObject::objectName +*/ /*! \fn bool QObject::isWidgetType() const diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h index 307518d..1865656 100644 --- a/src/corelib/kernel/qobject.h +++ b/src/corelib/kernel/qobject.h @@ -115,7 +115,7 @@ public: class Q_CORE_EXPORT QObject { Q_OBJECT - Q_PROPERTY(QString objectName READ objectName WRITE setObjectName) + Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged) Q_DECLARE_PRIVATE(QObject) public: @@ -313,6 +313,7 @@ public: Q_SIGNALS: void destroyed(QObject * = 0); + void objectNameChanged(const QString &objectName); public: inline QObject *parent() const { return d_ptr->parent; } diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index b20b98d..1ba4e29 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -3487,7 +3487,6 @@ void tst_QObject::isSignalConnected() QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig15()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig29()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig60()"))); - QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig61()"))); #endif QObject::connect(&o, SIGNAL(sig00()), &o, SIGNAL(sig69())); @@ -3542,7 +3541,6 @@ void tst_QObject::isSignalConnected() QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig21()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig25()"))); QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig55()"))); - QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig61()"))); #endif emit o.sig00(); diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 6d3ee26..95d7d2c 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -1091,15 +1091,15 @@ void tst_Moc::invokable() { { const QMetaObject &mobj = InvokableBeforeReturnType::staticMetaObject; - QCOMPARE(mobj.methodCount(), 5); - QVERIFY(mobj.method(4).signature() == QByteArray("foo()")); + QCOMPARE(mobj.methodCount(), 6); + QVERIFY(mobj.method(5).signature() == QByteArray("foo()")); } { const QMetaObject &mobj = InvokableBeforeInline::staticMetaObject; - QCOMPARE(mobj.methodCount(), 6); - QVERIFY(mobj.method(4).signature() == QByteArray("foo()")); - QVERIFY(mobj.method(5).signature() == QByteArray("bar()")); + QCOMPARE(mobj.methodCount(), 7); + QVERIFY(mobj.method(5).signature() == QByteArray("foo()")); + QVERIFY(mobj.method(6).signature() == QByteArray("bar()")); } } @@ -1107,23 +1107,23 @@ void tst_Moc::singleFunctionKeywordSignalAndSlot() { { const QMetaObject &mobj = SingleFunctionKeywordBeforeReturnType::staticMetaObject; - QCOMPARE(mobj.methodCount(), 6); - QVERIFY(mobj.method(4).signature() == QByteArray("mySignal()")); - QVERIFY(mobj.method(5).signature() == QByteArray("mySlot()")); + QCOMPARE(mobj.methodCount(), 7); + QVERIFY(mobj.method(5).signature() == QByteArray("mySignal()")); + QVERIFY(mobj.method(6).signature() == QByteArray("mySlot()")); } { const QMetaObject &mobj = SingleFunctionKeywordBeforeInline::staticMetaObject; - QCOMPARE(mobj.methodCount(), 6); - QVERIFY(mobj.method(4).signature() == QByteArray("mySignal()")); - QVERIFY(mobj.method(5).signature() == QByteArray("mySlot()")); + QCOMPARE(mobj.methodCount(), 7); + QVERIFY(mobj.method(5).signature() == QByteArray("mySignal()")); + QVERIFY(mobj.method(6).signature() == QByteArray("mySlot()")); } { const QMetaObject &mobj = SingleFunctionKeywordAfterInline::staticMetaObject; - QCOMPARE(mobj.methodCount(), 6); - QVERIFY(mobj.method(4).signature() == QByteArray("mySignal()")); - QVERIFY(mobj.method(5).signature() == QByteArray("mySlot()")); + QCOMPARE(mobj.methodCount(), 7); + QVERIFY(mobj.method(5).signature() == QByteArray("mySignal()")); + QVERIFY(mobj.method(6).signature() == QByteArray("mySlot()")); } } -- 2.7.4