Я хотел бы реализовать файловый браузер на PySide6, и мои цели:
- Отображать файлы и папки с
..
всегда вверху (независимо от сортировки), чтобы пользователь мог дважды щелкнуть по ним и перейти на один уровень вверх. - После
..
я хотел бы отображать папки, а затем файлы (как это делает проводник Windows) независимо от сортировки. - Есть альтернативный режим отображения, который показывает определенный набор файлов (они могут быть на разных дисках, в разных папках и т.д.).
В настоящее время я использую следующий код для инициализации модели и представления:
self.model = QFileSystemModel()
self.model.setRootPath(path)
self.model.setFilter(QDir.NoDot | QDir.AllEntries)
self.model.sort(0,Qt.SortOrder.AscendingOrder)
self.ui.treeView.setModel(self.model)
self.ui.treeView.setRootIndex(self.model.index(path))
self.ui.treeView.header().setSortIndicator(0, Qt.AscendingOrder)
self.ui.treeView.setSortingEnabled(True)
Вместо QFileSystemModel() я фактически использую свою настроенную QFileSystemModel с дополнительным столбцом.
Проблемы, с которыми я сталкиваюсь, заключаются в следующем:
..
сортируется вместе с другим содержимым и не отображается вверху- каталоги не остаются вверху после сортировки
Я не понимаю, как лучше всего решать проблемы, которые я решаю.
Я вижу следующие варианты:
- используйте QSortFilterProxyModel и каким-то образом заставьте
..
всегда быть сверху, независимо от сортировки (не уверен, что это возможно), а также сначала сохраняйте каталоги (есть связанный вопрос), я также потенциально мог бы использовать его для пункта 3 выше, чтобы отображать файлы по определенным критериям. - используйте совершенно другой подход, возможно, QFileSystemWatcher или QTreeWidget, которые я заполню вручную (сохранение
..
всегда наверху, похоже, в любом случае вызывает проблемы). - как-то добавить
..
вверху QTreeView после его загрузки или сортировки
Я попытался реализовать QSortFilterProxyModel, но столкнулся с другой проблемой: я не понимаю, как мне изменить вызов treeView.setRootIndex()
.
Итак, мои конкретные вопросы:
- Могу ли я использовать QSortFilterProxyModel для решения всех упомянутых выше проблем? Если да, приведите пример реализации.
- Если вы считаете, что есть лучший подход к этой проблеме, пожалуйста, опишите его.