Russian Qt Forum
Ноябрь 22, 2024, 11:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
[РЕШЕНО] QTreeWidget + Delegate
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] QTreeWidget + Delegate (Прочитано 7446 раз)
Vergil Alighieri
Гость
[РЕШЕНО] QTreeWidget + Delegate
«
:
Июнь 13, 2016, 08:04 »
Здравствуйте, уважаемые форумчане!
Кинул я на свою форму TreeWidget и стал забивать кастомными виджетами. Всегда знал что это медленно, но не мог подумать что отожру одной табличкой с парой сотен записей 100Мб оперативы.
Решил подумать о делегатах, но тема для меня достаточно новая и пока не освоился.
Проблема в том, что в таблице имеются элементы только двух уровней, но для обоих уровней нужен свой кастомный виджет.
Это картинка - как выглядит таблица (и как она должна выглядеть):
Помогите разобраться с данной тематикой. Буду очень благодарен примерам и советам как нужно и не нужно делать))
«
Последнее редактирование: Июнь 29, 2016, 09:29 от Vergil Alighieri
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QTreeWidget + Delegate
«
Ответ #1 :
Июнь 13, 2016, 08:56 »
Ну это QListWidget больше имхо, а не таблица.
А что должно быть виджетом 2 уровня?
Должен ли кконтент быть редактируемым?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Vergil Alighieri
Гость
Re: QTreeWidget + Delegate
«
Ответ #2 :
Июнь 13, 2016, 09:11 »
Цитата: Racheengel от Июнь 13, 2016, 08:56
А что должно быть виджетом 2 уровня?
Должен ли кконтент быть редактируемым?
Виджет второго уровня - просто составной виджет из лэйблов. Чуть позже они будут раскрашены. И некоторые элементы будут раскрашены по разному, в зависимости от статусов
Контент не редактируемый в таблице. Только формы по контекстным меню и даблкликам)
На счёт того, что это виджет, а не вьюшка - понимаю, но методом инсерта составного виджета в элемент по моему и вьюшка будет отжирать и тупить... Но это лишь предположение))
Опять же с вьюшками не особо то и работал, но понимаю что заполнение модели можно будет вынести адекватно в потоки) Хотя опять же вопрос именно в кастомных виджетах.. не даёт мне покоя кол-во отжираемой памяти, при условии что может быть и больше нескольких тысяч (а то и десятков тысяч) записей
«
Последнее редактирование: Июнь 13, 2016, 09:13 от Vergil Alighieri
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QTreeWidget + Delegate
«
Ответ #3 :
Июнь 13, 2016, 21:12 »
Тогда void QAbstractItemView::setItemDelegateForRow(int row, QAbstractItemDelegate *delegate) в помощь.
Переопределяете две штуки QStyledItemDelegate и назначаете их нужным рядам.
Поскольку делегаты только для чтения - надо в них переопределить методы paint(...), в которые будут передаваться индексы текущей ячейки модели, которая рисуется (const QModelIndex &index). По этому индексу достаем данные из модели и рисуем.
«
Последнее редактирование: Июнь 13, 2016, 21:22 от Racheengel
»
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Vergil Alighieri
Гость
Re: QTreeWidget + Delegate
«
Ответ #4 :
Июнь 14, 2016, 10:55 »
Пошёл слегка по другому.
Создал один делегат, унаследованный от QItemDelegate, и переопределил метод paint, вручную отрисовав то, что нужно методами drawRect, drawText и drawLine в зависимости от статусов))
Получилось довольно таки интересно, а самое главное - при очень большом кол-ве записей работает очень быстро и не кушает память)) Виджеты кастомные удалил и радуюсь)
Спасибо за информацию!
К сведению:
На кастомных виджетах в 300-500 записей QTreeWidget кушал от 70 Мб оперативной памяти.
На делегатах в 5000 записей откушал чуть меньше 2 мб)))
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QTreeWidget + Delegate
«
Ответ #5 :
Июнь 14, 2016, 12:33 »
Это логично, т.к. делегат не имеет своей памяти, а только рисует то, что живет в модели.
А каждый виджет тянет с собой 100500 properties.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: QTreeWidget + Delegate
«
Ответ #6 :
Июнь 14, 2016, 14:33 »
можно еще хитрить и отрисовывать прямо готовые виджеты
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Vergil Alighieri
Гость
Re: QTreeWidget + Delegate
«
Ответ #7 :
Июнь 15, 2016, 03:04 »
Спасибо всем (особенно Racheengel. Направил в нужное русло)))) Вопрос закрыт и к счастью слегка разобрался с делегатами)
«
Последнее редактирование: Июнь 15, 2016, 03:06 от Vergil Alighieri
»
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...