QFileSystemModel
からアイテムや行を非表示にする方法がわかりませんか? removeRows
の使用後は何も起こりません。私も試しましたPySideのQTreeViewでQFileSystemModelからアイテムを隠すには?
self.model.beginRemoveRows(QtCore.QAbstractItemModel.index(), 0, 10)
self.model.endRemoveRows()
結果はありません。どうしたらいいですか?
QFileSystemModel
からアイテムや行を非表示にする方法がわかりませんか? removeRows
の使用後は何も起こりません。私も試しましたPySideのQTreeViewでQFileSystemModelからアイテムを隠すには?
self.model.beginRemoveRows(QtCore.QAbstractItemModel.index(), 0, 10)
self.model.endRemoveRows()
結果はありません。どうしたらいいですか?
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()
を実装して、次のいずれかあなたは、モデルのユーザーとしてbeginXxx
とremoveXxx
メソッドを呼び出すことになっていません。モデル自体がそれらを呼び出すはずです。
これはPySideラッパーのAPI設計のエラーです。 C++では、これらのメソッドは保護されています。 Pythonには保護されたメソッド自体の概念はなく、PySideの実装者は明らかにPythonの規則にもかかわらず、未修飾の名前を使って保護されたメソッドを公開することを選択しました。 Pythonでは、保護されたメソッドの先頭に単一のアンダースコア_
を付けるのが普通です。プライベートメソッドはダブルアンダースコア__
を使用しますが、C++のPythonic APIにそれらが伝播しないので問題はありません。
[二重下線](http://docs.python.org/3/reference/expressions.html#atom-identifiers)は単なる規約ではなく、その一部です言語仕様のベースクラスと派生クラスの「プライベート」属性間の衝突を避けるために、二重下線の名前が自動的に変更されます。一重引用符で囲まれた名前の実際の規則はありません。たとえば、標準ライブラリ[namedtuple](https://docs.python.org/3/library/collections.html#collections.somenamedtuple._make)クラスでは、その公開APIの – ekhumoro
ありがとうございます、私はこのテーマについて少し詳しくお読みください。しかし、私はビューからアイテムを隠すことはできませんか?実際、それは私がやろうとしていることなので。 –
QFileSystemModelは、単純な名前フィルタ(回答に追加)をサポートするか、QSortFilterProxyでより複雑なフィルタを使用します。行1を削除できるとは思わないでください。 –