QFileSystemModel
является моделью и наследуется от QAbstractItemModel
, поэтому каждый элемент структуры имеет QModelIndex
, связанный с ним
из http://doc.qt.io/qt-5/model-view-programming.html#basic-concepts:
QModelIndex является временным представлением элементов, в котором хранится информация о его местонахождении в структуре.
В случае QFileSystemModel
это модель дерева типовТаким образом, он имеет в качестве корня QModelIndex
, и это может представлять любой каталог, поэтому для определения того, что является корнем, существует метод setRootPath()
:
QModelIndex QFileSystemModel :: setRootPath (const QString & newPath)
Устанавливает каталог, который отслеживается моделью, в newPath, устанавливая на нее средство наблюдения за файловой системой.Любые изменения в файлах и каталогах в этом каталоге будут отражены в модели.
Если путь будет изменен, будет выдан сигнал rootPathChanged ().
Примечание: эта функция не изменяетсяструктура модели или изменить данные, доступные для просмотра.Другими словами, «корень» модели не изменяется, чтобы включить только файлы и каталоги в каталог, указанный newPath в файловой системе.
Но также имейте в виду, что модель может бытьиспользуется несколькими представлениями, и в каждом представлении могут отображаться разные части модели (например, разные подкаталоги), поэтому rootIndex()
модели не должно быть корнем, показанным в представлении.Для этого представления, наследуемые от QAbstractItemView
, имеют метод setRootIndex()
:
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_())