0

I'm building an open source PySide6 app based on the custom file browser in QTreeView. I've already subclassed QFileSystemModel to display a custom column with some extra data.

Now my goal is to display a specific subset of files (they can be located on different drives) in a treeview.

To simplify things imagine that I have a function:

def files_to_display():
    return ['C:\file1', 'D:\file2', 'D:\file3']

Now I need to display these files in my QTreeView. I tried using QSortFilterProxyModel and filterAcceptsRow to filter out everything else and it worked. However on a relatively large number of files it's extremely slow and unusable. I'm pretty sure a simpler custom file tree would work faster because afaik QFileSystemModel tracks the folder state and runs other extra stuff that I can live without.

I'm not sure how to solve this problem. I see basically 2 ways:

  1. Somehow cut out what I don't need from QFileSystemModel. With this solution I don't fully understand how I do this. In particular, how do I fill the model with the data from my function? How do it use setRootPath?

  2. Subclass QAbstractItemModel. This solution is more or less clear, however, it's missing some of the important things that go with QFileSystemModel out of the box: I need the columns and the data it provides (name, size, type, modification date), I also need file/folder icons that I'm using with QFileIconProvider.

So basically I'd like to use a light-weighted version of QFileSystemModel without watching the file system and with my list of files.

I'm open to alternative solutions.

2
  • Did you try QFileSystemModel.setNameFilters()? Commented Mar 3, 2021 at 2:24
  • As far as I understand setNameFilters is used to filter by file name mask. That's not what I need exactly. Also looks like this operation is going to be heavy. Commented Mar 3, 2021 at 8:03

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.