Обновление прогрессбара Qt QtConcurrent

У меня есть QTableView, подключенный к QAbstractTableModel.
Модель используется с QtConcurrent::map для создания потоков для приложения (копирования файлов).

Я создал подкласс QStyledItemDelegate для отображения QStyleOptionProgressBar в одной из ячеек таблицы, и идея заключалась в том, чтобы обновить индикатор выполнения через модель. Работает, но от 0 до 100% за один раз, не плавно.

QAbstractTableModel::setData() вызывается в моем "цикле копирования", но кажется, что QAbstractTableModel::dataChanged() испускается только тогда, когда циклы заканчиваются. Неважно что я делаю.

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


person user635818    schedule 09.01.2013    source источник


Ответы (1)


Вам нужно реализовать setData() самостоятельно в классе модели таблицы, который является подклассом QAbstractTableModel. Реализация базового класса ничего не делает и возвращает false. Вы несете ответственность за передачу сигнала dataChanged(), если данные были успешно установлены.

person Daniel Hedberg    schedule 09.01.2013
comment
Я это уже сделал. Проблема, похоже, в том, что setData() вызывается внутри цикла. Когда цикл заканчивается, модель обновляется. Мне просто нужно, чтобы это произошло внутри цикла. - person user635818; 10.01.2013
comment
Вы должны посмотреть здесь (если это все еще актуально), stackoverflow.com/questions/14230265/ - person GoldenAxe; 15.03.2013