为什么我的 QFileSystemView 不能从 'set' 位置开始?

Why won't my QFileSystemView start at the 'set' location?

我有一个 QDialog,它传递了一个起始文件夹,我希望它是将被选中的文件夹,并且上层文件夹会展开。一切都按计划进行,除了 window 打开时所有文件夹都折叠起来并且只显示根图标。我一定是遗漏了一些简单的东西,因为这不可能是火箭科学……

class FolderSelectDialog(QDialog):
    def __init__(self, startingFolderName, parent = ZipRenamer):
        super(FolderSelectDialog, self).__init__()
        uic.loadUi('rootSelectDialog.ui', self)
        fileModel = QFileSystemModel()
        fileModel.setFilter(QDir.Dirs | QDir.NoDot | QDir.NoDotDot)
        fileModel.setRootPath(startingFolderName)
        self.selectedPath = startingFolderName
        self.fileSelectTreeView.setModel(fileModel)
        self.fileSelectTreeView.resizeColumnToContents(0)
        self.fileSelectTreeView.expand(fileModel.index(startingFolderName))

expand() 只扩展指定的索引, 它的父索引。它不应该,因为您可能想要展开或折叠一个索引,即使它的任何父索引都折叠了,这样当它们再次展开时,先前指定的索引将使用选定状态。

使用setCurrentIndex(),这将隐式扩展父索引并确保指定的索引可见。

此外,此时调用 resizeColumnToContents() 是错误的,因为在 尝试扩展索引之前调用 将导致将列大小调整为 current 内容,在这种情况下,这将是单独的根路径,因为它的所有子项仍处于折叠状态。

改用setSectionResizeMode()

self.fileSelectTreeView.header().setSectionResizeMode(0, 
    QtWidgets.QHeaderView.ResizeToContents)