Существует ли более простой способ использования фильтров в EntryList ()? - PullRequest
0 голосов
/ 21 марта 2019

Я новичок в Qt.У меня есть два типа файлов в моем каталоге.Сначала мне нужно работать с одним типом, а затем с другим.Я решил использовать EntryList () с фильтрами имен, такими как " .png" и " .txt", и он работает довольно хорошо.

Но этот метод требует фильтрации с типом QStringList () каквход.Поэтому мне интересно, могу ли я сделать это более простым способом, потому что я не буду использовать эти фильтры более одного раза, и поэтому я не хочу сохранять другие списки в своей памяти.

Как мне сделать это сейчас:

QStringList png_filter("*.png");
QStringList frst_filter = Dir.entryList(png_filter);
QStringList txt_filter("*.txt");
QStringList scnd_filter = Dir.entryList(txt_filter);
cout<<frst_filter.size()<<"  "<<scnd_filter.size()<<endl;

Или:

QStringList filter;
filter.push_back("*.png");
frst_filter = Dir.entryList(filter);
filter.pop_back();
filter.push_back("*.txt");
scnd_filter = Dir.entryList(filter);
cout<<frst_filter.size()<<"  "<<scnd_filter.size()<<endl;

PS Не нашли здесь полезной информации: https://doc.qt.io/qt-5/qdir.html#entryList

1 Ответ

0 голосов
/ 21 марта 2019

Возможно, я не понимаю проблемы. Если вы создадите QStringList в стеке, он будет уничтожен после выхода из функции.

Итак, вот более короткая версия:

Dir.enryList(QStringList() << "*.png" << "*.txt");

Если вы используете C ++ 11 или выше, вы можете использовать списки инициализаторов:

Dir.enryList({"*.png", "*.txt"});

...