Nevermind the filter, the problem occurs when setting KDescendantsProxyModel to SubTreesWithoutRoots. Using ChildrenOfExactSelection does not produce this problem, with or without QSortFilterProxyModel after it. So it is most likely an issue in KDescendantsProxyModel.
From: Rodrigo Oliva Sent: martes, 5 de junio de 2018 18:22 To: 'interest@qt-project.org' <interest@qt-project.org> Subject: KDescendantsProxyModel + QSortFilterProxyModel issue Hello, I've been using kde's kitemmodels library to make a content explorer. I have two panels, the left one which is a QTreeView that shows a folder tree structure and the right one which is a QListView that shows a list of files and folders from the current selected folder in the left panel, ignoring folder structure. The list view can then be filtered with a search box. Example use case: Left - Folder1 - Folder2 (selected) o Folder3 § File1 Right - Folder3 - File1 The way I wanted to do this was using the same source model for both panels, using proxy models to show whatever I want in each of the panels. The kitemmodels lib is great for this. The structure looks like this (mailing list friendly, indentation marks model ancestry): - Source Model (modeled as a tree). o Left QSortFilterProxyModel o KSelectionProxyModel § KDescendantsProxyModel - set to SubTreesWithoutRoots · Right QSortFilterProxyModel Everything works great, except when I insert rows in the source model while there is an active filter in the right QSortFilterProxyModel, in the filterAcceptsRow. It looks like this bool RightSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { Q_ASSERT(!source_parent.isValid()); // we are filtering a list QModelIndex sourceIndex = sourceModel()->index(source_row, 0); if (!sourceIndex.isValid()) { return false; } QString key = sourceModel()->data(sourceIndex).toString(); return filterRegExp().isEmpty() ? true : key.contains(filterRegExp()); } When sourceModel()->data(sourceIndex) is called, I get an assert in the RightSortFilterProxyModel source model, the KDescendantsProxyModel: "Didn't find target row.", in its mapToSource function. When run in release, the list gets filled with a bunch of empty rows. The source index is not invalid and sourceModel()->rowCount() returns greater than 0. Am I doing something wrong in this filterAcceptsRow? The strange thing is that this works perfectly without the filter. Excuse me if this not the right mailing list for this, I found some questions related to this in qt-interest-old. Cheers, Rodrigo
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest