summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qcombobox.cpp6
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp29
2 files changed, 34 insertions, 1 deletions
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 6a8e7b4641..6f927ab80b 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -1914,8 +1914,12 @@ void QComboBox::setModel(QAbstractItemModel *model)
connect(model, SIGNAL(modelReset()),
this, SLOT(_q_modelReset()));
- if (d->container)
+ if (d->container) {
d->container->itemView()->setModel(model);
+ connect(d->container->itemView()->selectionModel(),
+ SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(_q_emitHighlighted(QModelIndex)), Qt::UniqueConnection);
+ }
bool currentReset = false;
diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index ba3cf13271..eaf44d93cd 100644
--- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -158,6 +158,7 @@ private slots:
void task_QTBUG_1071_changingFocusEmitsActivated();
void maxVisibleItems();
void task_QTBUG_10491_currentIndexAndModelColumn();
+ void highlightedSignal();
protected slots:
void onEditTextChanged( const QString &newString );
@@ -2565,5 +2566,33 @@ void tst_QComboBox::task_QTBUG_10491_currentIndexAndModelColumn()
QCOMPARE(QModelIndex(d->currentIndex), model.index(2, comboBox.modelColumn()));
}
+void tst_QComboBox::highlightedSignal()
+{
+ QComboBox comboBox;
+
+ QSignalSpy spy(&comboBox, SIGNAL(highlighted(int)));
+ QVERIFY(spy.isValid());
+
+ // Calling view() before setting the model causes the creation
+ // of a QComboBoxPrivateContainer containing an actual view, and connecting to
+ // the selectionModel to generate the highlighted signal. When setModel is called
+ // further down, that selectionModel is obsolete. We test that the highlighted
+ // signal is emitted anyway as the bug fix. (QTBUG-4454)
+ comboBox.view();
+ QItemSelectionModel *initialItemSelectionModel = comboBox.view()->selectionModel();
+
+
+ QStandardItemModel model;
+ for (int i = 0; i < 5; i++)
+ model.appendRow(new QStandardItem(QString::number(i)));
+ comboBox.setModel(&model);
+
+ comboBox.view()->selectionModel()->setCurrentIndex(model.index(0, 0), QItemSelectionModel::Current);
+
+ QVERIFY(initialItemSelectionModel != comboBox.view()->selectionModel());
+
+ QCOMPARE(spy.size(), 1);
+}
+
QTEST_MAIN(tst_QComboBox)
#include "tst_qcombobox.moc"