如何在PySide的QTreeView中对QFileSystemModel隐藏项?

2024-09-25 14:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道如何隐藏QFileSystemModel中的项或行? 使用removeRows后,没有任何变化。我也试过了

    self.model.beginRemoveRows(QtCore.QAbstractItemModel.index(), 0, 10)
    self.model.endRemoveRows()

没有结果。我该怎么做?在


Tags: selfindexmodelqtcoreremoverowsqfilesystemmodelbeginremoverowsqabstractitemmodel
2条回答

顺便说一句:您永远不应该以模型的用户身份调用beginXxxremoveXxx方法。模型本身应该调用这些。在

这是PySide包装器的API设计中的一个错误。在C++中,这些方法受到保护。Python本身没有受保护方法的概念,而且PySide的实现者显然选择了使用不加修饰的名称来公开受保护的方法,尽管Python的惯例如此。在Python中,通常使用一个下划线_作为受保护方法的前缀。私有方法使用双下划线^ {< CD4}},但这并不重要,因为它们不会从C++中传播到Python API。在

QFileSystemModel并没有遵循传统的删除项目的函数,我想是因为它具有潜在的破坏性。在

您需要为每一个调用self.model.remove(index)。这将永久删除这些文件。 如果它是一个文件夹,您还需要调用self.model.rmdir(index)。在

看到了吗 http://doc.qt.io/qt-4.8/qfilesystemmodel.html#remove

如果您只是想隐藏行,那么您可以通过使用QDir::setNameFIltersQFileSystem.setNameFilters添加一个过滤器列表,例如.[“*.cpp”,“*.h”]。在

如果您正在做更专业的事情,那么您可以使用QSortFilterProxy。或者直接与QRegExp一起使用,或者使用子类实现filterAcceptsRow()

相关问题 更多 >