Russian Qt Forum
Ноябрь 23, 2024, 00:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

Сообщений: 11445


Просмотр профиля
« : Октябрь 01, 2019, 12:08 »

Добрый день

Есть колонка с checkbox. Если юзер "ставит галку" с нажатым Alt, то она ставится для всех айтемов (этот ф-ционал я добавил). И вот всего-то на 2K айтемов "задумывется" на минуту (если не больше). Начал разрывать исходники. Похоже Qt вызывает dataChanged для каждого изменения (setData). А dataChanged бросается считать макс ширину (а там по фонтам). Может как-то можно по-быстрому проскочить? (чисто шкурный интерес  Улыбающийся)

Спасибо
« Последнее редактирование: Октябрь 02, 2019, 11:02 от Igors » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Октябрь 01, 2019, 12:24 »

1. Написать свою модель в которой не делать dataChanged для всех?  
2. Написать свой чек-бокс?
3. Не использовать QTreeWidget?
« Последнее редактирование: Октябрь 01, 2019, 12:26 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Октябрь 02, 2019, 10:58 »

1. Написать свою модель в которой не делать dataChanged для всех?  
2. Написать свой чек-бокс?
3. Не использовать QTreeWidget?
Чекбокс и так "свой", но это ничего не дает. Докопался, надо так
Код
C++ (Qt)
this->scheduleDelayedItemsLayout();
// ставим все чекбоксы
this->viewport()->update();
 
Но жалко времени на рытье Плачущий
« Последнее редактирование: Октябрь 02, 2019, 11:02 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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