diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2023-08-25 16:13:15 +0200 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2023-09-03 18:20:45 +0200 |
commit | 2ef65f895be6cf7b448e739301a19a3c82458f7b (patch) | |
tree | 3860c2f7b05a2bb9f1b5040fd2676e6ef9f54f3d /src/corelib/itemmodels/qsortfilterproxymodel.cpp | |
parent | 6a873778b976b4752e874a2d87ea84e5d9e0d3c5 (diff) |
QSortFilterProxyModel: fix binding loops
... by using valueBypassingBindings() when accessing the properties
from the setters.
Task-number: QTBUG-116346
Pick-to: 6.6 6.5
Change-Id: Ibbad552fa1e611f4bb704b4e47667df5f328f152
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/corelib/itemmodels/qsortfilterproxymodel.cpp')
-rw-r--r-- | src/corelib/itemmodels/qsortfilterproxymodel.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp index 7939f93e6e..4600bcd986 100644 --- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp +++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp @@ -256,7 +256,7 @@ public: */ void set_filter_pattern(const QString &pattern) { - QRegularExpression re = filter_regularexpression.value(); + QRegularExpression re = filter_regularexpression.valueBypassingBindings(); const auto cs = re.patternOptions() & QRegularExpression::CaseInsensitiveOption; re.setPattern(pattern); re.setPatternOptions(cs); @@ -1267,7 +1267,7 @@ void QSortFilterProxyModelPrivate::update_persistent_indexes( */ void QSortFilterProxyModelPrivate::filter_about_to_be_changed(const QModelIndex &source_parent) { - if (!filter_regularexpression.value().pattern().isEmpty() + if (!filter_regularexpression.valueBypassingBindings().pattern().isEmpty() && source_index_mapping.constFind(source_parent) == source_index_mapping.constEnd()) { create_mapping(source_parent); } @@ -2583,10 +2583,11 @@ void QSortFilterProxyModel::setFilterRegularExpression(const QRegularExpression { Q_D(QSortFilterProxyModel); const QScopedPropertyUpdateGroup guard; - const bool regExpChanged = regularExpression != d->filter_regularexpression.value(); + const bool regExpChanged = + regularExpression != d->filter_regularexpression.valueBypassingBindings(); d->filter_regularexpression.removeBindingUnlessInWrapper(); d->filter_casesensitive.removeBindingUnlessInWrapper(); - const Qt::CaseSensitivity cs = filterCaseSensitivity(); + const Qt::CaseSensitivity cs = d->filter_casesensitive.valueBypassingBindings(); d->filter_about_to_be_changed(); const Qt::CaseSensitivity updatedCs = regularExpression.patternOptions() & QRegularExpression::CaseInsensitiveOption @@ -2627,7 +2628,7 @@ void QSortFilterProxyModel::setFilterKeyColumn(int column) Q_D(QSortFilterProxyModel); d->filter_column.removeBindingUnlessInWrapper(); d->filter_about_to_be_changed(); - const auto oldColumn = d->filter_column.value(); + const auto oldColumn = d->filter_column.valueBypassingBindings(); d->filter_column.setValueBypassingBindings(column); d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows); if (oldColumn != column) @@ -2925,7 +2926,7 @@ void QSortFilterProxyModel::setSortRole(int role) { Q_D(QSortFilterProxyModel); d->sort_role.removeBindingUnlessInWrapper(); - if (d->sort_role == role) + if (d->sort_role.valueBypassingBindings() == role) return; d->sort_role.setValueBypassingBindings(role); d->sort(); @@ -2964,7 +2965,7 @@ void QSortFilterProxyModel::setFilterRole(int role) { Q_D(QSortFilterProxyModel); d->filter_role.removeBindingUnlessInWrapper(); - if (d->filter_role == role) + if (d->filter_role.valueBypassingBindings() == role) return; d->filter_about_to_be_changed(); d->filter_role.setValueBypassingBindings(role); |