Отображение только файлов с правильным расширением

Я пытаюсь в QFileSystemModel отображать только файлы с расширением *.txt, а другие типы заштрихованы/выделены серым цветом:

  • proxy_ имеет тип QSortFilterProxyModel

  • model_ имеет тип QFileSystemModel

Вот мой код:

proxy_->setFilterWildcard("*.txt");  
proxy_->setSourceModel(model_);
model_->setNameFilters(QStringList(proxy_->filterRegExp().pattern()));
model_->setNameFilterDisables(true);
sel_model_ = (new QItemSelectionModel(proxy_));
treeView->setModel(proxy_);
treeView->setSelectionModel(sel_model_);

... но при этом ничего не отображается, на мой взгляд. Кто-нибудь знает, что я делаю неправильно?


person user336635    schedule 07.12.2011    source источник
comment
Вы устанавливаете корневой путь или каталог для model_? В противном случае нет файлов для фильтрации. Должно выглядеть примерно так: model_->setRootPath(QDir::currentPath());   -  person AJG85    schedule 07.12.2011


Ответы (1)


Вы можете установить фильтр имен файлов с помощью QFileSystemModel::setNameFilters.

В приведенном ниже примере программы .txt и папки отображаются нормально, а другие файлы отключены (выделены серым цветом).

Свойство nameFilterDisables позволяет выбирать между отключением или скрытием отфильтрованных файлов.

#include <QtGui>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QFileSystemModel model;
    model.setRootPath(QDir::rootPath());

    QStringList filters;
    filters << "*.txt";

    model.setNameFilters(filters);

    QTreeView view;
    view.setModel(&model);
    view.show();

    return app.exec();
}
person Silas Parker    schedule 07.12.2011