我无法弄清楚如何隐藏QFileSystemModel
中的项目或行?
使用removeRows
后没有任何反应。我也试过了
self.model.beginRemoveRows(QtCore.QAbstractItemModel.index(), 0, 10)
self.model.endRemoveRows()
没有结果。我该怎么办?
答案 0 :(得分:4)
QFileSystemModel并没有遵循传统的删除项目的功能,我想因为它具有潜在的破坏性。
您需要为每个人拨打self.model.remove(index)
。这将永久删除文件。
如果恰好是文件夹,您还需要致电self.model.rmdir(index)
。
见 http://doc.qt.io/qt-4.8/qfilesystemmodel.html#remove
如果您只是想隐藏行,那么您可以添加过滤器列表,例如[" *。cpp"," *。h"]通过QFileSystem.setNameFilters,使用QDir::setNameFIlters。
如果您正在做更专业的事情,那么您可以使用QSortFilterProxy
。直接使用QRegExp或子类并实现filterAcceptsRow()
答案 1 :(得分:3)
暂且不说:您永远不应该将beginXxx
和removeXxx
方法称为模型的用户。模型本身应该调用它们。
这是PySide包装器API设计中的错误。在C ++中,这些方法受到保护。 Python本身没有受保护方法的概念,并且PySide的实现者显然选择使用纯粹的名称来公开受保护的方法,尽管有Python惯例。在Python中,使用单个下划线_
为受保护的方法添加前缀可能是常规的。私有方法使用双下划线__
,但这并不重要,因为它们不会从C ++传播到Pythonic API中。