Russian Qt Forum
Июль 18, 2019, 09:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Тормоза QTreeWidget  (Прочитано 1153 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10479


Просмотр профиля
« : Декабрь 04, 2018, 07:41 »

Добрый день

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

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

Спасибо
Записан
qate
Птица говорун
*****
Offline Offline

Сообщений: 949


Просмотр профиля
« Ответ #1 : Декабрь 04, 2018, 14:38 »

без примера "обустройства" неясно в чем проблема
в обычный QTreeWidget из примера qtbase/examples/xml/rsslisting 12к добавляются менее чем за секунду
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10479


Просмотр профиля
« Ответ #2 : Декабрь 04, 2018, 15:21 »

без примера "обустройства" неясно в чем проблема
в обычный QTreeWidget из примера qtbase/examples/xml/rsslisting 12к добавляются менее чем за секунду
Обустройство здесь ни при чем, после добавления каждого айтема я делаю item->setSelected(true), ну хочу чтобы вновь добавленные айтемы были выбраны (логично)
Записан
ViTech
Хакер
*****
Offline Offline

Сообщений: 654



Просмотр профиля
« Ответ #3 : Декабрь 04, 2018, 15:54 »

Обустройство здесь ни при чем, после добавления каждого айтема я делаю item->setSelected(true), ну хочу чтобы вновь добавленные айтемы были выбраны (логично)

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

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10479


Просмотр профиля
« Ответ #4 : Декабрь 04, 2018, 16:25 »

Так может их скопом лучше выбирать через QItemSelectionModel::select()?
Смотрел "в эту сторону", но "ни асилил" Улыбающийся Это ж надо индексы брать, потом все равно их "мерджат" - правда там немало тратится на испускание какого-то сигнала что мне не нужен.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1004


Просмотр профиля
« Ответ #5 : Декабрь 04, 2018, 18:06 »

Без кастомной модели врядли получится грузить большое количество итемов.
По крайней мере здесь уместно QAbstractItemModel::beginResetModel()/endResetModel()
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2509

чтоб работа волком не казалась :)


Просмотр профиля WWW
« Ответ #6 : Декабрь 04, 2018, 18:38 »

Известная проблема: https://bugreports.qt.io/browse/QTBUG-60940 , https://bugreports.qt.io/browse/QTBUG-9485

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

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
ViTech
Хакер
*****
Offline Offline

Сообщений: 654



Просмотр профиля
« Ответ #7 : Декабрь 04, 2018, 19:09 »

Смотрел "в эту сторону", но "ни асилил" Улыбающийся Это ж надо индексы брать, потом все равно их "мерджат" - правда там немало тратится на испускание какого-то сигнала что мне не нужен.

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

Пока сам не сделаешь...
DarkHobbit
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« Ответ #8 : Декабрь 22, 2018, 17:01 »

QTreeWidget прекрасно устраивает.
...
Но вот появилось дерево с объемом поприличнее.
Извиняюсь, если предлагаю банальщину, которая вам по каким-то причинам не подошла - но я бы в таком случае таки задумался на переходе на QTreeView.
Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.