QFileSystemModel是一个用于访问本机文件系统的数据模型(还有一个是QDirModel,两者主要区别是使用主线程还是独立线程,建议使用独立线程的QFileSystemModel)。
QFileSystemModel模型
- QFileSystemModel配合qt的view可以实现目录的访问。
- QFileSystemModel自带目录变化监听
- 此类提供对本地文件系统的访问,提供了用于重命名和删除文件和目录以及创建新目录的功能。
设置目录
1 2 3 4
| setRootPath(self, str) -> QModelIndex 通过在模型上安装文件系统监视程序,设置模型监视的目录 此目录中文件和目录的任何更改都将反映在模型中。 如果没有设置rootPath,将不会获取任何文件或目录
|
获取信息
1 2 3 4 5 6 7 8
| fileInfo(self, QModelIndex) -> QFileInfo fileName(self, QModelIndex) -> str filePath(self, QModelIndex) -> str isDir(self, QModelIndex) -> bool isReadOnly(self) -> bool lastModified(self, QModelIndex) -> QDateTime size(self, QModelIndex) -> int 返回文件大小(单位字节) type(self, QModelIndex) -> str 返回类型,比如"Directory"或"JPEG file"
|
操作
1 2 3 4
| mkdir(self, QModelIndex, str) -> QModelIndex remove(self, QModelIndex) -> bool rmdir(self, QModelIndex) -> bool setReadOnly(self, bool)
|
QTreeView
QTreeView继承自QAbstractItemView,这里只记录一下QAbstractItemView的一些信号。
1 2 3 4 5 6 7
| activated (index) clicked (index) doubleClicked (index) entered (index) iconSizeChanged (size) pressed (index) viewportEntered()
|
目录树的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class App(QWidget):
def __init__(self): super().__init__() self.initUI()
def initUI(self): self.model = QFileSystemModel() self.model.setRootPath('') self.tree = QTreeView() self.tree.setModel(self.model) self.tree.setAnimated(True) self.tree.setIndentation(20) self.tree.setSortingEnabled(True) self.tree.clicked.connect(self.action) windowLayout = QVBoxLayout(self) windowLayout.addWidget(self.tree) self.show()
def action(self, index): print(self.model.filePath(index))
|