X-B*_*... 5 python pyqt qfilesystemmodel python-3.x pyqt5
我是QFileSystemModel类的新手,但我对setRootPath和setRootIndex的功能感到困惑
QFileSystemModel是一个模型,继承自QAbstractItemModel,因此结构的每个元素都有一个QModelIndex关联
来自http://doc.qt.io/qt-5/model-view-programming.html#basic-concepts:
QModelIndex是项的临时表示,用于存储其在结构中的位置信息。
在QFileSystemModel是树类型的模型的情况下,它具有根a QModelIndex,并且它可以表示任何目录,因此要确定根是什么,可以使用以下setRootPath()方法:
QModelIndex QFileSystemModel :: setRootPath(const QString&newPath)
通过在模型上安装文件系统监视程序,将模型监视的目录设置为newPath。此目录中文件和目录的任何更改都将反映在模型中。
如果更改路径,将发出rootPathChanged()信号。
注意:此功能不会更改模型的结构或修改视图可用的数据。换句话说,模型的“根”不会更改为仅包含文件系统中newPath指定的目录内的文件和目录。
但也要记住,一个模型可以被多个视图使用,并且每个视图都可以显示模型的不同子部分(例如,不同的子目录),因此rootIndex(),模型的不应成为模型中显示的根。视图。为此,从其继承的视图QAbstractItemView具有setRootIndex()方法:
无效的QAbstractItemView :: setRootIndex(const QModelIndex&index)
将根项目设置为给定索引处的项目。
总而言之,QFileSystemModel具有的rootPath表示从哪里监视文件的根,而具有的视图则rootIndex告诉他们要显示模型的哪一部分。
例:
import sys
from PyQt5.QtCore import QDir
from PyQt5.QtWidgets import QFileSystemModel, QTreeView, QWidget, QHBoxLayout, QApplication
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
lay = QHBoxLayout(w)
model = QFileSystemModel()
model.setRootPath(QDir.rootPath())
for dirname in (QDir.rootPath(), QDir.homePath(), QDir.currentPath()):
view = QTreeView()
view.setModel(model)
view.setRootIndex(model.index(dirname))
lay.addWidget(view)
w.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)