diff options
-rw-r--r-- | src/widgets/widgets/qcombobox.cpp | 6 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp | 29 |
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" |