为什么我的QFileSystemModel QModelIndex无法获得子节点信息?

问题描述 投票:1回答:1

我了解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())

结果:

“”

我的文件夹:

“”

python pyqt pyqt5 qfilesystemmodel
1个回答
0
投票

说明:

正如docs(12)指出:

缓存和性能

QFileSystemModel将不会获取任何内容文件或目录,直到调用setRootPath()为止。这样可以防止在此之前对文件系统进行的所有不必要的查询,例如列出Windows上的驱动器。

与QDirModel不同,QFileSystemModel使用单独的线程来填充本身,因此不会导致主线程作为文件系统挂起正在被查询。调用rowCount()将返回0,直到模型填充目录。

QFileSystemModel保留带有文件信息的缓存。缓存是使用QFileSystemWatcher自动保持最新。


QModelIndex QFileSystemModel :: setRootPath(const QString&newPath)

设置模型正在监视的目录到newPath的目录在其上安装文件系统监视程序。对文件和该目录中的目录将反映在模型中。

如果更改路径,将发出rootPathChanged()信号。

注意:此功能不会更改模型的结构或修改可用于视图的数据。换句话说,模型未更改为仅包含文件和目录中的文件系统中newPath指定的目录。

重点矿

加载过程在另一个线程中执行,并且加载是异步完成的,因此在您发出请求时,尚未加载模型。

解决方案:

解决方案是在信息加载后请求通过directoryLoadeddirectoryLoaded信号通知的信息:

QFileSystemModel
© www.soinside.com 2019 - 2024. All rights reserved.