Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Декабрь 04, 2018, 07:41



Название: Тормоза QTreeWidget
Отправлено: Igors от Декабрь 04, 2018, 07:41
Добрый день

Обычно объем данных мал - и сотки айтемов не будет, поэтому QTreeWidget прекрасно устраивает. Ну конечно унаследовался, обустроился и.т.п. Но вот появилось дерево с объемом поприличнее. Проверил на 12K - дерево заполняется за 6 минут. Не слабо. Ладно, профайлю, показывает что 55% сжирается на, казалось бы, безобидной операции QTreeWidgetItem::selectItem

Это грабли известные? Или я что-то делаю не так?

Спасибо


Название: Re: Тормоза QTreeWidget
Отправлено: qate от Декабрь 04, 2018, 14:38
без примера "обустройства" неясно в чем проблема
в обычный QTreeWidget из примера qtbase/examples/xml/rsslisting 12к добавляются менее чем за секунду


Название: Re: Тормоза QTreeWidget
Отправлено: Igors от Декабрь 04, 2018, 15:21
без примера "обустройства" неясно в чем проблема
в обычный QTreeWidget из примера qtbase/examples/xml/rsslisting 12к добавляются менее чем за секунду
Обустройство здесь ни при чем, после добавления каждого айтема я делаю item->setSelected(true), ну хочу чтобы вновь добавленные айтемы были выбраны (логично)


Название: Re: Тормоза QTreeWidget
Отправлено: ViTech от Декабрь 04, 2018, 15:54
Обустройство здесь ни при чем, после добавления каждого айтема я делаю item->setSelected(true), ну хочу чтобы вновь добавленные айтемы были выбраны (логично)

Так может их скопом лучше выбирать через QItemSelectionModel::select()?


Название: Re: Тормоза QTreeWidget
Отправлено: Igors от Декабрь 04, 2018, 16:25
Так может их скопом лучше выбирать через QItemSelectionModel::select()?
Смотрел "в эту сторону", но "ни асилил" :) Это ж надо индексы брать, потом все равно их "мерджат" - правда там немало тратится на испускание какого-то сигнала что мне не нужен.


Название: Re: Тормоза QTreeWidget
Отправлено: Fregloin от Декабрь 04, 2018, 18:06
Без кастомной модели врядли получится грузить большое количество итемов.
По крайней мере здесь уместно QAbstractItemModel::beginResetModel()/endResetModel()


Название: Re: Тормоза QTreeWidget
Отправлено: Racheengel от Декабрь 04, 2018, 18:38
Известная проблема: https://bugreports.qt.io/browse/QTBUG-60940 , https://bugreports.qt.io/browse/QTBUG-9485

QTreeWidgetItem::selectItem оч. медленннннная. Пишуть, что в 5.11 починили, но хз как на самом деле.



Название: Re: Тормоза QTreeWidget
Отправлено: ViTech от Декабрь 04, 2018, 19:09
Смотрел "в эту сторону", но "ни асилил" :) Это ж надо индексы брать, потом все равно их "мерджат" - правда там немало тратится на испускание какого-то сигнала что мне не нужен.

Получается, что надо самому руками формировать QItemSelection и скармливать его в QItemSelectionModel::select(). При этом, по идее, должно быть одно обновление выделения, а не 12к с событиями и что там ещё попутно обновляется.


Название: Re: Тормоза QTreeWidget
Отправлено: DarkHobbit от Декабрь 22, 2018, 17:01
QTreeWidget прекрасно устраивает.
...
Но вот появилось дерево с объемом поприличнее.
Извиняюсь, если предлагаю банальщину, которая вам по каким-то причинам не подошла - но я бы в таком случае таки задумался на переходе на QTreeView.