Russian Qt Forum
Ноябрь 24, 2024, 16:42
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable (Прочитано 4025 раз)
cheqa
Гость
QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
:
Октябрь 09, 2013, 20:52 »
Доброго вечера.
Имеется следующая ситуация: QTreeWidget с 10000+ элементов.
Предыдущая версия интерфейса содержала элементы без квадратика чекбокса. Сейчас понадобилось сделать так, чтобы чекбоксы у элементов были.
В одном месте программы происходит итерирование по всем элементам и сброс флага Qt::ItemIsUserCheckable в false. Заметил, что длительность этой операции почти линейно зависит от количества элементов - при 1000 занимает 10 миллисекунд на один сброс флага (умножаем на количество элементов), на 10000 - уже 100. Что-то оно там пересчитывает, геометрию, что-ли. Понятно, что если тратить по 100 миллисекунд для сброса флага у 10000+ элементов - то никакого терпения не хватит дождаться конца операции.
Задача у меня простая: при выполнении определённых условий "заморозить" состояние элементов - чтобы их можно было скроллить, даблкликать итд, но нельзя было бы поднимать-опускать флаги. Я хотел решить этот вопрос в лоб - и получил по лбу.
Уважаемое сообщество, каким образом можно решить задачу в моей постановке? И можно ли запретить при установке/сбросе флага пересчитывать геометрию всех остальных элементов?
Спасибо.
Записан
_OLEGator_
Гость
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #1 :
Октябрь 09, 2013, 20:57 »
Для больших объемов данных рекомендуется использовать QTreeView.
Записан
cheqa
Гость
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #2 :
Октябрь 09, 2013, 21:01 »
Цитата: _OLEGator_ от Октябрь 09, 2013, 20:57
Для больших объемов данных рекомендуется использовать QTreeView.
Да, я в курсе, спасибо. Просто вот так вот было сделано, и переделывать пока времени и желания нет. Собственно, с таким количеством элементов Виджет справляется вполне приемлимо - если бы не вот это вот недоразумение.
Собственно, нашёл промежуточное решение - для начала схлопнуть все айтемы верхнего уровня - потом переменить флаги - а потом расхлопнуть их обратно.
Записан
_OLEGator_
Гость
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #3 :
Октябрь 09, 2013, 21:16 »
Можно еще это попробовать
Код
C++ (Qt)
QWidget
::
setUpdatesEnabled
(
bool
enable
)
Записан
cheqa
Гость
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #4 :
Октябрь 09, 2013, 21:37 »
Цитата: _OLEGator_ от Октябрь 09, 2013, 21:16
Можно еще это попробовать
Код
C++ (Qt)
QWidget
::
setUpdatesEnabled
(
bool
enable
)
Вот, спасибо, мне кажется, именно это я и искал... Сейчас попробую.
Записан
cheqa
Гость
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #5 :
Октябрь 09, 2013, 21:51 »
Цитата: _OLEGator_ от Октябрь 09, 2013, 21:16
Можно еще это попробовать
Код
C++ (Qt)
QWidget
::
setUpdatesEnabled
(
bool
enable
)
К сожалению, помогает только помещение всех айтемов в единого родителя и его сворачивание. Тогда - быстро. setUpdatesEnabled никакого эффекта не дают.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #6 :
Октябрь 10, 2013, 07:35 »
Цитата: cheqa от Октябрь 09, 2013, 21:51
К сожалению, помогает только помещение всех айтемов в единого родителя и его сворачивание. Тогда - быстро. setUpdatesEnabled никакого эффекта не дают.
Что и не удивительно, т.к. тормозит не отрисовка, а просто до неприличия ужасно тормозная реализация дерева в QTreeWidgetModel (в QStandardItemModel аналогично).
Кроме как реализовать свою модель, ничего тут не предложишь
Записан
Qt 5.11/4.8.7 (X11/Win)
cheqa
Гость
Re: QTreeWidgetItem - медленно убирает флаг Qt::ItemIsUserCheckable
«
Ответ #7 :
Октябрь 10, 2013, 08:23 »
Цитата: GreatSnake от Октябрь 10, 2013, 07:35
Что и не удивительно, т.к. тормозит не отрисовка, а просто до неприличия ужасно тормозная реализация дерева в QTreeWidgetModel (в QStandardItemModel аналогично).
Кроме как реализовать свою модель, ничего тут не предложишь
Эхх... когда-нибудь, когда будет время... Спасибо за совет!
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...