QComboBox: Update completer on setCurrentIndex()
When the ComboBox currentText() was changed by key LineUp or LineDown or mouse click, the completer still contained the last inserted characters. If now all text was selected (by Ctrl+A or selectAll()), the old item and index was restored on next Enter press. Task-number: QTBUG-41288 Change-Id: I6916fd31c8b8fbacfb12e1a62c3e46823cf918b4 Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
This commit is contained in:
parent
f64b87a5df
commit
e610ef8c8d
@ -2074,8 +2074,11 @@ void QComboBoxPrivate::setCurrentIndex(const QModelIndex &mi)
|
||||
currentIndex = QPersistentModelIndex(normalized);
|
||||
if (lineEdit) {
|
||||
const QString newText = itemText(normalized);
|
||||
if (lineEdit->text() != newText)
|
||||
if (lineEdit->text() != newText) {
|
||||
lineEdit->setText(newText);
|
||||
if (lineEdit->completer())
|
||||
lineEdit->completer()->setCompletionPrefix(newText);
|
||||
}
|
||||
updateLineEditGeometry();
|
||||
}
|
||||
if (indexChanged) {
|
||||
|
@ -158,6 +158,7 @@ private slots:
|
||||
void highlightedSignal();
|
||||
void itemData();
|
||||
void task_QTBUG_31146_popupCompletion();
|
||||
void task_QTBUG_41288_completerChangesCurrentIndex();
|
||||
void keyboardSelection();
|
||||
void setCustomModelAndView();
|
||||
void updateDelegateOnEditableChange();
|
||||
@ -3026,6 +3027,44 @@ void tst_QComboBox::task_QTBUG_31146_popupCompletion()
|
||||
QCOMPARE(comboBox.currentIndex(), 0);
|
||||
}
|
||||
|
||||
void tst_QComboBox::task_QTBUG_41288_completerChangesCurrentIndex()
|
||||
{
|
||||
QComboBox comboBox;
|
||||
comboBox.setEditable(true);
|
||||
|
||||
comboBox.addItems(QStringList() << QStringLiteral("111") << QStringLiteral("222"));
|
||||
|
||||
comboBox.show();
|
||||
comboBox.activateWindow();
|
||||
QVERIFY(QTest::qWaitForWindowActive(&comboBox));
|
||||
|
||||
{
|
||||
// change currentIndex() by keyboard
|
||||
comboBox.lineEdit()->selectAll();
|
||||
QTest::keyClicks(comboBox.lineEdit(), "222");
|
||||
QTest::keyClick(comboBox.lineEdit(), Qt::Key_Enter);
|
||||
QCOMPARE(comboBox.currentIndex(), 1);
|
||||
|
||||
QTest::keyClick(&comboBox, Qt::Key_Up);
|
||||
comboBox.lineEdit()->selectAll();
|
||||
QTest::keyClick(comboBox.lineEdit(), Qt::Key_Enter);
|
||||
QCOMPARE(comboBox.currentIndex(), 0);
|
||||
}
|
||||
|
||||
{
|
||||
// change currentIndex() programmatically
|
||||
comboBox.lineEdit()->selectAll();
|
||||
QTest::keyClicks(comboBox.lineEdit(), "222");
|
||||
QTest::keyClick(comboBox.lineEdit(), Qt::Key_Enter);
|
||||
QCOMPARE(comboBox.currentIndex(), 1);
|
||||
|
||||
comboBox.setCurrentIndex(0);
|
||||
comboBox.lineEdit()->selectAll();
|
||||
QTest::keyClick(comboBox.lineEdit(), Qt::Key_Enter);
|
||||
QCOMPARE(comboBox.currentIndex(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QComboBox::keyboardSelection()
|
||||
{
|
||||
QComboBox comboBox;
|
||||
|
Loading…
Reference in New Issue
Block a user