QCompleter: fix crash when setting the same model twice
Found when retesting the testcase completer.zip from QTBUG-54642 Pick-to: 6.3 6.2 5.15 Change-Id: Id84eefeb3a33dc6d790cfa23755352381cc097a9 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>bb10
parent
2140edaaab
commit
7382e5735e
|
|
@ -1100,6 +1100,8 @@ void QCompleter::setModel(QAbstractItemModel *model)
|
|||
{
|
||||
Q_D(QCompleter);
|
||||
QAbstractItemModel *oldModel = d->proxy->sourceModel();
|
||||
if (oldModel == model)
|
||||
return;
|
||||
#if QT_CONFIG(filesystemmodel)
|
||||
if (qobject_cast<const QFileSystemModel *>(oldModel))
|
||||
setCompletionRole(Qt::EditRole); // QTBUG-54642, clear FileNameRole set by QFileSystemModel
|
||||
|
|
|
|||
|
|
@ -1652,6 +1652,16 @@ void tst_QComboBox::setModel()
|
|||
QCOMPARE(box.rootModelIndex(), rootModelIndex);
|
||||
box.setModel(box.model());
|
||||
QCOMPARE(box.rootModelIndex(), rootModelIndex);
|
||||
|
||||
// check that setting the same model as the completer's doesn't crash
|
||||
QCompleter *completer = new QCompleter(&box);
|
||||
box.setEditable(true);
|
||||
box.setCompleter(completer);
|
||||
auto *listModel = new QStringListModel({ "one", "two" }, completer);
|
||||
completer->setModel(listModel);
|
||||
QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted
|
||||
box.setModel(listModel);
|
||||
QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted
|
||||
}
|
||||
|
||||
void tst_QComboBox::setCustomModelAndView()
|
||||
|
|
|
|||
Loading…
Reference in New Issue