Russian Qt Forum

Qt => Model-View (MV) => Тема начата: titan83 от Январь 27, 2017, 21:39



Название: [РЕШЕНО] QTableView + resizeRowsToContents = очень мендленно
Отправлено: titan83 от Январь 27, 2017, 21:39
Коллеги, здравствуйте.
Появилась у меня легкая проблема.
Есть QTableView, в который я загружаю обычно немного данных (<100 строк на 3 столбца), к нему же подключен делегат, обсчитывающий высоту строки в зависимости от данных из модели.
Но тут я загрузил ~50000 строк и получил ~55 секунд на обработку (15 секунд sql, остальное - пересчет размеров строк).
Печаль меня ждала в виде метода QTableView::resizeRowsToContents(), который честно вызывал методы моего делегата 50000 раз, при том что одновременно показывается не больше 30 строк.
Я хотел использовать его младшего брата QTableView::resizeRowToContents(int row), это, вроде, то, что нужно. Но загвоздка в том, что я не могу найти способа отлавливать ни момент изменения отображаемых строк, ни получить индексы строк, которые показывает QTableView в данный момент.
Может я вообще пошел не тем путем, но тут важна итоговая цель - не тратить время на пересчет не отображаемых в данный момент строк.
Спасибо.


Название: Re: QTableView + resizeRowsToContents = очень мендленно
Отправлено: Johnik от Январь 27, 2017, 21:59
попробуйте:
void QHeaderView::setResizeContentsPrecision(int precision) (http://doc.qt.io/qt-5/qheaderview.html#setResizeContentsPrecision)
...
Special value 0 means that it will look at only the visible area. Special value -1 will imply looking at all elements.
...


Название: Re: QTableView + resizeRowsToContents = очень мендленно
Отправлено: titan83 от Январь 27, 2017, 22:26
попробуйте:
void QHeaderView::setResizeContentsPrecision(int precision) (http://doc.qt.io/qt-5/qheaderview.html#setResizeContentsPrecision)
...
Special value 0 means that it will look at only the visible area. Special value -1 will imply looking at all elements.
...
спасибо.
пробовал сделать на verticalHeader(), перед этим добавив setResizeMode(QheaderView::ResizeToContents), но что-то у меня так и не взлетело - бесконечный пересчет начался.


Название: Re: QTableView + resizeRowsToContents = очень мендленно
Отправлено: titan83 от Январь 28, 2017, 10:37
Пошел я по пути наименьшего сопротивления и сделал фиксированную высоту строк, стало очень быстро, заказчик согласовал.


Название: Re: [РЕШЕНО] QTableView + resizeRowsToContents = очень мендленно
Отправлено: Авварон от Февраль 01, 2017, 15:42
Печаль меня ждала в виде метода QTableView::resizeRowsToContents(), который честно вызывал методы моего делегата 50000 раз, при том что одновременно показывается не больше 30 строк.
Это потому, что ему надо просчитать значения скроллбара вертикального.
То, что вы сделали фиксированную ширину - единственный правильный способ добиться скорости, да.