Skip to content

Commit

Permalink
[Mon / Qt Apps] Fixed filter-function
Browse files Browse the repository at this point in the history
The MultiColumnSortFilterProxyModel now supports QRegexp and QRegularExpression depending on the Qt Version
  • Loading branch information
FlorianReimold committed May 14, 2024
1 parent 1fd8cde commit 6fe13fa
Showing 1 changed file with 67 additions and 1 deletion.
68 changes: 67 additions & 1 deletion lib/CustomQt/src/QMulticolumnSortFilterProxyModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,14 @@ QVector<int> QMulticolumnSortFilterProxyModel::filterKeyColumns() const

bool QMulticolumnSortFilterProxyModel::filterDirectAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
QRegularExpression const filter_regexp = filterRegularExpression();
// Qt 5 uses the deprecated QRegExp by default when setting a FilterFixedString. The QRegularExpression is then empty
// QRegularExpression didn't even exist in Qt 5.11 and earlier
// Qt 6 sets the QRegularExpression (QRegExp does not exist anymore) when setting a FilterFixedString.

#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
// For Qt5.11 there only exists the RegExp, so we need to check the QRegExp

QRegExp const filter_regexp = filterRegExp();

for (int column : filter_columns_)
{
Expand All @@ -72,6 +79,65 @@ bool QMulticolumnSortFilterProxyModel::filterDirectAcceptsRow(int source_row, co
}
}
return false;

#elif QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
// For Qt5.12 - 5.15 (i.e. pre-Qt6) we need to check the QRegExp and the QRegularExpression
QRegExp const filter_regexp = filterRegExp();

if (!filter_regexp.isEmpty())
{
// Use QRegExp
for (int column : filter_columns_)
{
QModelIndex index = sourceModel()->index(source_row, column, source_parent);
if (index.isValid())
{
QString data = sourceModel()->data(index, filterRole()).toString();
if (data.contains(filter_regexp))
{
return true;
}
}
}
return false;
}
else
{
// Use QRegularExpression, as QRegExp is empty
QRegularExpression const filter_regularexpression = filterRegularExpression();

for (int column : filter_columns_)
{
QModelIndex index = sourceModel()->index(source_row, column, source_parent);
if (index.isValid())
{
QString data = sourceModel()->data(index, filterRole()).toString();
if (data.contains(filter_regularexpression))
{
return true;
}
}
}
return false;
}
#else
// For Qt6 we only need to check the QRegularExpression
QRegularExpression const filter_regularexpression = filterRegularExpression();

for (int column : filter_columns_)
{
QModelIndex index = sourceModel()->index(source_row, column, source_parent);
if (index.isValid())
{
QString data = sourceModel()->data(index, filterRole()).toString();
if (data.contains(filter_regularexpression))
{
return true;
}
}
}
return false;
#endif
}

////////////////////////////////////////////
Expand Down

0 comments on commit 6fe13fa

Please sign in to comment.