diff --git a/model/entryfiltermodel.cpp b/model/entryfiltermodel.cpp index 7f6b602..4ee5f84 100644 --- a/model/entryfiltermodel.cpp +++ b/model/entryfiltermodel.cpp @@ -22,9 +22,15 @@ bool EntryFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &source if(QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent)) { return true; } - QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent); - if(sourceModel()->hasChildren(sourceIndex)) { - return true; + return hasAcceptedChildren(sourceModel()->index(sourceRow, 0, sourceParent)); +} + +bool EntryFilterModel::hasAcceptedChildren(const QModelIndex &index) const +{ + for(int i = 0, rowCount = sourceModel()->rowCount(index); i < rowCount; ++i) { + if(filterAcceptsRow(i, index)) { + return true; + } } return false; } diff --git a/model/entryfiltermodel.h b/model/entryfiltermodel.h index 4c3c10b..7462a21 100644 --- a/model/entryfiltermodel.h +++ b/model/entryfiltermodel.h @@ -13,6 +13,10 @@ public: protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; + +private: + bool hasAcceptedChildren(const QModelIndex &index) const; + }; }