QListviewでQFileSystemModelを使用して、ディレクトリからすべてのファイルを表示しています。そのモデルをフィルタリングして、次のようなファイルのカテゴリを表示したいと思います。
- テキストファイル: *.txt *.csv *.tab
- 音楽: *.mp3 *.flac *.ogg
- ムービー : *.avi *.mkv
私の現在のコードは次のとおりです。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
Filemodel = new QFileSystemModel(this) ;
Filemodel->setFilter( QDir::NoDotAndDotDot | QDir::Files ) ;
proxy_model = new QSortFilterProxyModel();
proxy_model ->setDynamicSortFilter(true);
proxy_model ->setSourceModel( Filemodel );
proxy_model ->setFilterKeyColumn(0);
ui->Filtered_tbView->setModel( proxy_model ) ;
}
(...)
/* combobox event to select file type to filter */
void MainWindow::on_FSFilter_Combo_currentIndexChanged(int index)
{
proxy_model->setFilterWildcard("*.txt"); // just a simple example here
ui->Filtered_tbView->setModel( proxy_model ) ;
}
すべてのタイプのファイルがディレクトリに存在する間、そのコードは何も表示しません。
その上、私が試したことがうまくいかなかったこと(ポインターは、さらなる読者にとって役立つかもしれません):
- setNameFilters : うまく機能しますが、すべてのファイルを表示できます (フィルタリングされていないものはグレー表示されます)。
- カスタム ソート/フィルター モデルの例-> QSortFilterProxyModel を使用している間、この例はやや複雑すぎて、ファイル拡張子を除外するだけでは済みません。さらに、ここのように多くのフィルターを使用する場合に最適な方法ではない正規表現を使用しています。
- qt-project から興味深いスニペットも見つけましたが、複数の拡張子を持つ行に実装する方法を見つけることができませんでした