с помощью qdiriterator пробегаешься по всем папкам и просто выводишь название каждого файла?
Взял пример из документации:
QDirIterator it("/sys", QStringList() << "scaling_cur_freq", QDir::NoFilter, QDirIterator::Subdirectories);
while (it.hasNext()) {
QFile f(it.next());
qDebug() << f.fileName();
}
Если файлов мало, то не успевает зависнуть, а если много, то всё - капец, беда
Неужели как-то потоки подключать? Спасибо заранее
Тебе многопоточность нужна. Собираешь данные в массив а по окончанию возвращаешь данные. Можно использовать QtConcurrent::run и QFuture
это не название каждого файла, а уже целый readAll с открыванием
Вопрос в том, как run использовать? Непосредственно в QDiriterator?
По идее у тебя не должно тормозить после исправления. В run запускаешь функцию с файлами
положить этот приведённый выше фрагмент в run. или в QThread::create
там в итераторе вроде QFileInfo был. с ним быстрее брать имя, размер итп. без QFile дополнительного
Спасибо @Suigintou45 @mr_mait Сейчас попробую, отпишусь
Да, поддерживаю. Там еще можно узнать директория или файл и посмотреть имя файла не открывая его
Выводить в цикле уже не правильно, хотя бы через сигнал слот, какая никакая асинхронность будет
@mr_mait @Suigintou45 насколько я понимаю громоздкие операции вообще не засовывать в qdiriterator? Максимум скопировать все имена в файлов в QList и затем уже над этими строками работать?
ну лучше сканировать ФС один раз, да
Подскажите, пожалуйста, если не трудно ) Допустим, я засунул тяжёлую операцию в qdiriterator (она сопровождается progressBar’ом), а потом пишу сообщение о том, что операция закончена и название файла, над которым она закончена. В итоге при запуске у меня сначала выводятся все сообщения о завершении операции. А потом начинает крутиться progressBar и обрабатываться файлы. Это опять что-то с потоками? Сделал moveToThread для объекта класса, в котором тяжёлая функция выполняется, чтобы интерфейс не вис. Спасибо!
Да, если у вас обработка прогресса происходит в слоте или в потоке
В одном потоке (гуишном) происходит вывод, а в другом обработка - Вы это хотите сказать?
Да. Слот - это создание нового потока или что то похожее
каким образом сделана связь из потока, с сообщениями и с прогресс-баром?
Никаким) Сделана связь между прогрессбаром и процессом обработки
я про то, как поток обновляет gui. напрямую низя
Если в поток передать сам интерфейс, то вполне возможно
Обсуждают сегодня