2024-09-25 14:30:28 发布
网友
我不知道如何隐藏QFileSystemModel中的项或行? 使用removeRows后,没有任何变化。我也试过了
QFileSystemModel
removeRows
self.model.beginRemoveRows(QtCore.QAbstractItemModel.index(), 0, 10) self.model.endRemoveRows()
没有结果。我该怎么做?在
顺便说一句:您永远不应该以模型的用户身份调用beginXxx和removeXxx方法。模型本身应该调用这些。在
beginXxx
removeXxx
这是PySide包装器的API设计中的一个错误。在C++中,这些方法受到保护。Python本身没有受保护方法的概念,而且PySide的实现者显然选择了使用不加修饰的名称来公开受保护的方法,尽管Python的惯例如此。在Python中,通常使用一个下划线_作为受保护方法的前缀。私有方法使用双下划线^ {< CD4}},但这并不重要,因为它们不会从C++中传播到Python API。在
_
QFileSystemModel并没有遵循传统的删除项目的函数,我想是因为它具有潜在的破坏性。在
您需要为每一个调用self.model.remove(index)。这将永久删除这些文件。 如果它是一个文件夹,您还需要调用self.model.rmdir(index)。在
self.model.remove(index)
self.model.rmdir(index)
看到了吗 http://doc.qt.io/qt-4.8/qfilesystemmodel.html#remove
如果您只是想隐藏行,那么您可以通过使用QDir::setNameFIlters的QFileSystem.setNameFilters添加一个过滤器列表,例如.[“*.cpp”,“*.h”]。在
如果您正在做更专业的事情,那么您可以使用QSortFilterProxy。或者直接与QRegExp一起使用,或者使用子类实现filterAcceptsRow()
QSortFilterProxy
filterAcceptsRow()
顺便说一句:您永远不应该以模型的用户身份调用
beginXxx
和removeXxx
方法。模型本身应该调用这些。在这是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::setNameFIlters的QFileSystem.setNameFilters添加一个过滤器列表,例如.[“*.cpp”,“*.h”]。在
如果您正在做更专业的事情,那么您可以使用
QSortFilterProxy
。或者直接与QRegExp一起使用,或者使用子类实现filterAcceptsRow()
相关问题 更多 >
编程相关推荐