是QFileSystemModel类的新手,但我对setRootPath和setRootIndex的函数感到困惑
答案 0 :(得分:2)
QFileSystemModel
是一个模型,并且继承自QAbstractItemModel
,因此结构的每个元素都与QModelIndex
相关联
来自http://doc.qt.io/qt-5/model-view-programming.html#basic-concepts:
QModelIndex是存储其在结构中的位置信息的项目的临时表示。
如果QFileSystemModel
是树类型的模型,那么它的根目录为QModelIndex
,这可以代表任何目录,因此要确定根是什么{{3方法:
QModelIndex QFileSystemModel :: setRootPath(const QString& newPath)
将模型正在监视的目录设置为newPath by 在其上安装文件系统观察程序。对文件和文件的任何更改 此目录中的目录将反映在模型中。
如果路径发生变化,将发出rootPathChanged()信号。
注意:此功能不会更改模型的结构或 修改视图可用的数据。换句话说,“根”了 model不会更改为仅包含文件和目录 newPath在文件系统中指定的目录。
但是请记住,一个模型可以被多个视图使用,每个视图可以显示模型的不同子部分(例如不同的子目录),因此模型的rootIndex()
不应该是视图中显示的根。为此,从QAbstractItemView
继承的视图具有setRootPath()
方法:
void 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_())