如何在QTreeView中仅显示文件名,隐藏大小、类型和日期列?
解决QTreeView隐藏QFileSystemModel多余列的问题
嗨,我来帮你搞定这个需求!要隐藏QFileSystemModel里的Size、Type和Date列只显示文件名,其实不用纠结setHeader方法——那玩意儿主要是用来修改表头文字的,咱们直接用QTreeView自带的hideColumn()方法就可以轻松实现。
QFileSystemModel默认有4列,对应的索引是固定的:
- 索引0:文件名(Name)
- 索引1:大小(Size)
- 索引2:类型(Type)
- 索引3:修改日期(Date Modified)
你只需要在设置好treeView的模型之后,添加几行代码把后面三列隐藏掉就行。修改后的完整代码片段如下:
self.model = QFileSystemModel() self.model.setRootPath(QDir.rootPath()) self.model.setFilter(QDir.NoDotAndDotDot | QDir.AllEntries | QDir.Dirs | QDir.Files) self.proxy_model = QSortFilterProxyModel(recursiveFilteringEnabled = True, filterRole = QFileSystemModel.FileNameRole) self.proxy_model.setSourceModel(self.model) self.model.setReadOnly(False) self.model.setNameFilterDisables(False) self.indexRoot = self.model.index(self.model.rootPath()) self.treeView = QTreeView(self) self.treeView.setModel(self.proxy_model) # 新增:隐藏不需要的列,只保留文件名列 self.treeView.hideColumn(1) self.treeView.hideColumn(2) self.treeView.hideColumn(3) self.adjust_root_index() self.treeView.setRootIndex(self.indexRoot) self.treeView.clicked.connect(self.on_treeView_clicked) self.treeView.doubleClicked.connect(self.treeMedia_doubleClicked) self.treeView.setDragDropMode(QAbstractItemView.InternalMove) self.treeView.setAnimated(True) self.treeView.setIndentation(20) self.treeView.setSortingEnabled(True) self.treeView.setDragEnabled(True) self.treeView.setAcceptDrops(True) self.treeView.setDropIndicatorShown(True) self.treeView.setEditTriggers(QTreeView.NoEditTriggers) self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) self.treeView.customContextMenuRequested.connect(self.showContextMenu)
这样操作之后,你的treeView就只会显示文件名那一列了。如果之后需要重新显示隐藏的列,调用self.treeView.showColumn(索引)就行,非常灵活。
内容的提问来源于stack exchange,提问作者JareBear
相关产品推荐
相关产品推荐

