Fix CaseSensitivity handling for QRegularExpression in QSortFilterProxyModel

setFilterRegExp retains the caseSensitivity() while setFilterRegularExpression did not.
Change setFilterRegularExpression to also retain the case sensitivity.

Fixes: QTBUG-83313
Pick-to: 5.15
Change-Id: I46f494d320aee99d50612f01f63558c693276989
Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
Reviewed-by: David Faure <david.faure@kdab.com>
bb10
Marcel Krems 2020-04-05 16:47:31 +02:00
parent d9d813b6d1
commit 9a921d78e8
2 changed files with 23 additions and 1 deletions

View File

@ -2653,7 +2653,8 @@ void QSortFilterProxyModel::setFilterRegularExpression(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
d->filter_about_to_be_changed();
QRegularExpression rx(pattern);
QRegularExpression rx(pattern,
d->filter_data.patternOptions() & QRegularExpression::CaseInsensitiveOption);
d->filter_data.setPattern(pattern);
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
}

View File

@ -37,6 +37,7 @@ public:
tst_QSortFilterProxyModelRegularExpression();
private slots:
void tst_invalid();
void tst_caseSensitivity();
};
tst_QSortFilterProxyModelRegularExpression::tst_QSortFilterProxyModelRegularExpression() :
@ -52,5 +53,25 @@ void tst_QSortFilterProxyModelRegularExpression::tst_invalid()
QCOMPARE(model.filterRegularExpression(), QRegularExpression(pattern));
}
void tst_QSortFilterProxyModelRegularExpression::tst_caseSensitivity()
{
const QLatin1String pattern("test");
QStringListModel model({ "test", "TesT" });
QSortFilterProxyModel proxyModel;
proxyModel.setSourceModel(&model);
proxyModel.setFilterCaseSensitivity(Qt::CaseInsensitive);
proxyModel.setFilterRegularExpression(pattern);
QCOMPARE(proxyModel.filterCaseSensitivity(), Qt::CaseInsensitive);
QCOMPARE(proxyModel.rowCount(), 2);
proxyModel.setFilterCaseSensitivity(Qt::CaseSensitive);
QCOMPARE(proxyModel.filterCaseSensitivity(), Qt::CaseSensitive);
QCOMPARE(proxyModel.rowCount(), 1);
proxyModel.setFilterCaseSensitivity(Qt::CaseInsensitive);
QCOMPARE(proxyModel.filterCaseSensitivity(), Qt::CaseInsensitive);
QCOMPARE(proxyModel.rowCount(), 2);
}
QTEST_MAIN(tst_QSortFilterProxyModelRegularExpression)
#include "tst_qsortfilterproxymodel_regularexpression.moc"