Russian Qt Forum

Qt => Общие вопросы => Тема начата: qt_beginner от Ноябрь 14, 2011, 09:09



Название: Вопрос по фильтрам QDir
Отправлено: qt_beginner от Ноябрь 14, 2011, 09:09
Вот такая проблема стоит. Мне нужно, чтобы фильтр выбрал директории и файлы, с расширениями ext1,ext2,ext3.
Как это лучше сделать? Описанная ниже конструкция не работает - применяется либо setFilter либо setNameFilters
Код:
  QStringList filters;
   filters << "" << "*.ext1" << "*.ext2" << "*.ext3";
   fileDir.setFilter(QDir::Dirs);
   fileDir.setNameFilters(filters);


Название: Re: Вопрос по фильтрам QDir
Отправлено: virtual_root от Ноябрь 14, 2011, 09:48
В этом коде делается то что ты хочешь,организовано ввиде рекурсии,чтобы во всех папках текущей директории нийти файлы с указанным расширением,которое задается с помощью маски.
Код:
void FileFinder::start(const QDir& dir)
{
    QApplication::processEvents();

    QStringList listFiles =
        dir.entryList(m_ptxtMask->text().split(" "), QDir::Files);
   
    foreach (QString file, listFiles) {
        m_ptxtResult->append(dir.absoluteFilePath(file));
    }

    QStringList listDir = dir.entryList(QDir::Dirs);
    foreach (QString subdir, listDir) {
        if (subdir == "." || subdir == "..") {
            continue;
        }
        start(QDir(dir.absoluteFilePath(subdir)));
    }
}


Название: Re: Вопрос по фильтрам QDir
Отправлено: truetrup от Ноябрь 14, 2011, 21:19
Недавно делал коечто подобное... Вот пример:
Код:
QDir directory(dir);
QStringList filtr;
filtr << "" << "*.ext1" << "*.ext2" << "*.ext3";
directory.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
QFileInfoList list = directory.entryInfoList();
//тут допустим выводишь list в консоль(сейчас list список дирректорий);
directory.setFilter(QDir::Files);
    directory.setNameFilters(filtr);
    list = directory.entryInfoList();
//ну а теперь list содержит список файлов с примененным фильтром по имени...