diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index b85da48c49d..7a96918f0c6 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -1320,7 +1320,7 @@ void QObject::doSetObjectName(const QString &name) d->extraData->objectName.removeBindingUnlessInWrapper(); - if (d->extraData->objectName != name) { + if (d->extraData->objectName.valueBypassingBindings() != name) { d->extraData->objectName.setValueBypassingBindings(name); d->extraData->objectName.notify(); // also emits a signal } @@ -1338,7 +1338,7 @@ void QObject::setObjectName(QAnyStringView name) d->extraData->objectName.removeBindingUnlessInWrapper(); - if (d->extraData->objectName != name) { + if (d->extraData->objectName.valueBypassingBindings() != name) { d->extraData->objectName.setValueBypassingBindings(name.toString()); d->extraData->objectName.notify(); // also emits a signal } diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 31345cc3333..a4f761d6b99 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -8197,6 +8197,16 @@ void tst_QObject::objectNameBinding() QObject obj; QTestPrivate::testReadWritePropertyBasics(obj, "test1", "test2", "objectName"); + + const QPropertyBinding binding([]() { + QObject obj2; + obj2.setObjectName(QLatin1String("no loop")); + return obj2.objectName(); + }, {}); + obj.bindableObjectName().setBinding(binding); + + QCOMPARE(obj.objectName(), QLatin1String("no loop")); + QVERIFY2(!binding.error().hasError(), qPrintable(binding.error().description())); } namespace EmitToDestroyedClass {