You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:34:32