aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp6
-rw-r--r--tests/auto/controls/data/tst_combobox.qml20
2 files changed, 26 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index cce61509..00fdd421 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -40,6 +40,7 @@
#include "qquickpopup_p_p.h"
#include <QtCore/qregexp.h>
+#include <QtCore/qabstractitemmodel.h>
#include <QtGui/qpa/qplatformtheme.h>
#include <QtQml/qjsvalue.h>
#include <QtQml/qqmlcontext.h>
@@ -410,6 +411,11 @@ void QQuickComboBox::setModel(const QVariant& m)
if (d->model == model)
return;
+ if (QAbstractItemModel* aim = qvariant_cast<QAbstractItemModel *>(d->model))
+ QObjectPrivate::disconnect(aim, &QAbstractItemModel::dataChanged, d, &QQuickComboBoxPrivate::updateCurrentText);
+ if (QAbstractItemModel* aim = qvariant_cast<QAbstractItemModel *>(model))
+ QObjectPrivate::connect(aim, &QAbstractItemModel::dataChanged, d, &QQuickComboBoxPrivate::updateCurrentText);
+
d->model = model;
d->createDelegateModel();
if (isComponentComplete()) {
diff --git a/tests/auto/controls/data/tst_combobox.qml b/tests/auto/controls/data/tst_combobox.qml
index d21e9900..29bf62c8 100644
--- a/tests/auto/controls/data/tst_combobox.qml
+++ b/tests/auto/controls/data/tst_combobox.qml
@@ -840,4 +840,24 @@ TestCase {
control.destroy()
}
+
+ // QTBUG-55118
+ function test_currentText() {
+ var control = comboBox.createObject(testCase, {model: listmodel})
+ verify(control)
+
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "First")
+
+ listmodel.setProperty(0, "text", "1st")
+ compare(control.currentText, "1st")
+
+ control.currentIndex = 1
+ compare(control.currentText, "Second")
+
+ listmodel.setProperty(0, "text", "First")
+ compare(control.currentText, "Second")
+
+ control.destroy()
+ }
}