我了解pyqt中的Model / View架构,但是当我按照Using model indexes指令并尝试以pyqt5样式编写演示时。QModelIndex无法获取子节点信息?
代码:
class DemoB(QPushButton):
def __init__(self):
super().__init__()
self.clicked.connect(self.on_clicked)
def on_clicked(self, checked):
model = QFileSystemModel()
model.setRootPath(QDir.homePath())
parentIndex = model.index(QDir.homePath())
print(parentIndex.data() )
print(parentIndex, model.rowCount(parentIndex), QDir.homePath())
for row in range(model.rowCount(parentIndex)):
index = model.index(row, 0, parentIndex)
print(index, index.data())
结果:
我的文件夹:
缓存和性能
QFileSystemModel将不会获取任何内容文件或目录,直到调用setRootPath()为止。这样可以防止在此之前对文件系统进行的所有不必要的查询,例如列出Windows上的驱动器。与QDirModel不同,QFileSystemModel使用单独的线程来填充本身,因此不会导致主线程作为文件系统挂起正在被查询。调用rowCount()将返回0,直到模型填充目录。
QFileSystemModel保留带有文件信息的缓存。缓存是使用QFileSystemWatcher自动保持最新。
QModelIndex QFileSystemModel :: setRootPath(const QString&newPath)
设置模型正在监视的目录到newPath的目录在其上安装文件系统监视程序。对文件和该目录中的目录将反映在模型中。如果更改路径,将发出rootPathChanged()信号。
注意:此功能不会更改模型的结构或修改可用于视图的数据。换句话说,模型未更改为仅包含文件和目录中的文件系统中newPath指定的目录。
重点矿
加载过程在另一个线程中执行,并且加载是异步完成的,因此在您发出请求时,尚未加载模型。
解决方案是在信息加载后请求通过directoryLoaded
的directoryLoaded
信号通知的信息:
QFileSystemModel