D>к наполнению заголовка таблицы применяются на ура — летает как ракета
Так себе. Я бы посоветовал в конце этого всего сделать emit _ui.calcDataView->model()->dataChanged( QModelIndex(), QModelIndex() ); чтобы обновить содержимое. А то на некоторых визуальных темах может не обноваться контент.
З.Ы. с blockSignals будьте готовы к случайным падениям, если юзер тыкнет мышкой во вьюху в процессе апдейта. Уменьшить риски, но не убрать их на 100% можно задизэйблив виджет на время обновления. И так же запретить изменение размера окна, на котором лежит вьюха. В общем, мы такие костыли явно запрещали у себя.
З.З.Ы. processEvents лучше вообще выкинуть из цикла.
Здравствуйте, Demon051, Вы писали:
D>Я правильно понимаю, что переход на QTableView приведет к необходимости создания всяких моделей и т.д.? D>Или же там можно так же просто как с QTableWidget, но будет быстрее работать?
Да нужна модель. В ней описываются и заголовки и данные. QTableWidget это нашлепка над QTableView. Основные тормоза при работе с QTableWidgetItem.
Кстати, вставка в цикл QApplication::processEvents(); ни разу не ускоряет работу. Наоборот цикл обработки отвлекается на обработку сообщений, в том числе на отрисовку. Попробуйте убрать его для начала.
При большом кол-ве столбцов (например более 300), на формирование заголовка уходит больше минуты.
Время отжирает операция вставки _ui.calcDataView->setHorizontalHeaderItem(i,item) ;
Ещё есть варианты — более быстрые?
через _ui.calcDataView->setHorizontalHeaderLabels(headers) ; пробовал — ещё тормознее!!!
Здравствуйте, Qt-Coder, Вы писали:
QC>Здравствуйте, Demon051, Вы писали:
QC>Надо отказаться от QTableWidget и перейти на QTableView.
К сожалению уже поздно...
Проект на стадии завершения и вот при проверке на больших объемах оно и всплыло.
На данный виджет завязана куча всего и теперь надо как-то выкрутиться.
Я правильно понимаю, что переход на QTableView приведет к необходимости создания всяких моделей и т.д.?
Или же там можно так же просто как с QTableWidget, но будет быстрее работать?
Re[4]: QTableWidget - Тормоза при формировании заголовка
Здравствуйте, Qt-Coder, Вы писали:
QC>... QC>Кстати, вставка в цикл QApplication::processEvents(); ни разу не ускоряет работу. Наоборот цикл обработки отвлекается на обработку сообщений, в том числе на отрисовку. Попробуйте убрать его для начала.
Как вариант, если нет времени на нормальное решение — можно дёргать его, например, один раз на каждые 30-100 итераций цикла. Шаг подобрать эмпирически.
По поводу моделей и быстродействия — на самом деле никто не запрещает формировать саму модель в отдельном потоке, а потом за 1 операцию подменять модель уже в GUI потоке. QStandardItem не является наследником QObject/QWidget. Многие почему-то про это забывают.
Re[5]: QTableWidget - Тормоза при формировании заголовка
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, Qt-Coder, Вы писали:
QC>>... QC>>Кстати, вставка в цикл QApplication::processEvents(); ни разу не ускоряет работу. Наоборот цикл обработки отвлекается на обработку сообщений, в том числе на отрисовку. Попробуйте убрать его для начала.
SaZ>Как вариант, если нет времени на нормальное решение — можно дёргать его, например, один раз на каждые 30-100 итераций цикла. Шаг подобрать эмпирически.
SaZ>По поводу моделей и быстродействия — на самом деле никто не запрещает формировать саму модель в отдельном потоке, а потом за 1 операцию подменять модель уже в GUI потоке. QStandardItem не является наследником QObject/QWidget. Многие почему-то про это забывают.