Оказывается, проблема в том, что я использовал QFileSystemModel
(не в этой функции, а в общем), чтобы показать список файлов в папке, и этот ответ указывает:
QFileSystemModel
перечисляет каталоги в фоновом потоке, чтобы избежать
блокировка пользовательского интерфейса. Однако, как только он получает список обновлений в
QFileSystemModelPrivate::_q_fileSystemChanged
затем получает
иконки для файла в основном потоке с помощью
QFileInfoGatherer::getInfo()
который в свою очередь вызывает
QFileIconProvider::icon(QFileInfo)
.
Проблема в том, что QFileSystemModel
постоянно обновляет графический интерфейс, в то время как новый поток быстро создает / удаляет файлы, что приводит к запаздыванию. Я не знаю, как остановить или задержать обновления в этой модели, но я изменил rootPath
на ""
и изменил его обратно после завершения работы функции:
void on_process_button_clicked_real_work() const
{
std::lock_guard<std::mutex> lock(mutex);
auto path = model.rootPath();
model.setRootPath("");
// Some irrelevant code ...
model.setRootPath(path);
}
Реализация какого-либо типа объекта блокировки для обеспечения безопасности исключений и обеспечения возврата rootPath
, возможно, является наиболее оптимальным способом.