【发布时间】:2020-04-23 13:52:07
【问题描述】:
我正在尝试使用 PySide2 在 Python 3.6 中做一些基本的 Qt 文件管理器应用程序。代码是这样的:
class MainWidget(QWidget):
startDir = "."
def __init__(self):
super().__init__()
isDirselectDone = self.selectContentDir()
if isDirselectDone:
self.model = QFileSystemModel()
self.model.setRootPath(self.startDir)
self.tree = QTreeView()
self.tree.setModel(self.model)
self.tree.setSortingEnabled(True)
self.tree.show()
def selectContentDir(self):
print("Selecing game content folder")
self.startDir = QFileDialog.getExistingDirectory()
if(len(self.startDir) == 0):
print("Game content folder loading cancelled")
return False
print("Trying to load ", self.startDir)
return True
我的问题是,无论所选目录的内容是什么,视图都不会对文件进行排序。我可以点击哦标题,小箭头正在改变,但一切都保持加载顺序。
我试图寻找解决方案,但答案要么说你只需要调用 setSortingEnabled() 并且一切都神奇地工作(事实并非如此),要么他们描述了一些涉及从 QAbstractTreeSuperAncientGodItemViewDelegate 继承的巫术魔法仪式,然后重新实现 Qt 库的一半,最后通过连接各处的插槽和信号创建一个类似 Tartarus 的迷宫。
那么根据最新的 Qt 标准进行排序的最简单/最简单的方法是什么?
【问题讨论】:
-
真奇怪,我对你的代码做了一些修改,它对我来说可以正常工作:gist.github.com/eyllanesc/7f6419f94788ce95760847358e229a46
-
只需复制粘贴您的版本即可。然而,这个问题实际上出现在一个更复杂的代码环境中,我也有 QtApplication 设置,以及正确的树根索引集。我发布的是最简单的问题形式,我可以在没有完整应用程序复杂性的情况下重现该问题。您知道根本的区别是什么吗?可能像设置调用的顺序一样?
标签: python sorting pyside2 qtreeview qfilesystemmodel