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

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

Страниц: [1] 2 3 ... 5   Вниз
  Печать  
Автор Тема: Размещение множества сложных виджетов  (Прочитано 22368 раз)
antipart
Гость
« : Январь 04, 2012, 21:10 »

Доброго времени суток! 
Столкнулся с такой проблемой:
Есть большое количество(~1000) сложных кастомных виджетов(график дежурств)
- каждый включает в себя ~10 QLineEdit c QComplete + ~300 виджетов(по количеству дней в месяце для каждогоQLineEdit ) включающих в себя QCheckBox + 2QLabel + контекстное меню + всякие завязки SIGNAL/SLOT.
Вобщем проблема в том, что надо отображать не по одному, а все вместе, с прокруткой!

Пробовал:
1. QScrollArea - тормозит жутко, такое ощущение, что каждый раз (при переходе на вкладку с графиками) все перерисовывает.

2. QGraficsScene - отрисовывает нормально без тормозов, но здесь жесть при добавлении методом QGraficsScene::addWidget() (30 виджетов добавляются ~1min причем с постоянным замедлением) здесь скорость добавления очень зависит от сложности виджета.

3. QItemDelegate - через view->openPersistentEditor... тоже тормоза еще те (пробовал на 30 виджетах) при переходе на вкладку.

Подскажите реально ли это вообще сделать, может кто сталкивался? Куда копать?
Записан
andrew.k
Гость
« Ответ #1 : Январь 05, 2012, 13:10 »

По описанию сложно все это представить.
Может своя модель, QTableView и собственный делегат будет лучше?

На форуме была подобная тема и кто-то писал, что добивался приемлемой производительности с большим количеством виджетов, но по-моему это изврат и надо что-то менять.

1000 виджетов - это плохое проектирование.
Записан
andrew.k
Гость
« Ответ #2 : Январь 05, 2012, 13:23 »

Возможно, раз там что-то сложное рисуется нужно использовать кеширование, а не вычислять все каждый раз?
Записан
antipart
Гость
« Ответ #3 : Январь 05, 2012, 13:40 »

но по-моему это изврат и надо что-то менять.
1000 виджетов - это плохое проектирование.
1. понятно что изврат, и это не мое проектирование, задача так стоит и не иначе... уже голову сломал
2. мне бы хоть 300 виджетов запустить таким образом

вот думаю.. может не использовать QScrollArea, а отнаследоваться от QAbstractScrollArea -> можно ли в этом случае
поменять тип отрисовки, чтобы при переходе на эту вкладку апдейтилась только видимая часть как в QGraphics?
Ведь реально видны только 1-2 виджета на экране, остальные по скроллу..

как бы совместить поведение QScrollArea и QGraphicsScene, чтобы виджеты добавлялись быстро и при отображении не тормозили.

еще думал в сторону QItemDelegate:  в методе paint рисованием пытаться сдублировать весь этот большой гарфик дежурств
а потом на createEditor активировать сам виджет, но это геморрой еще тот... (тут же еще надо чтобы они совпадали)
Записан
andrew.k
Гость
« Ответ #4 : Январь 05, 2012, 13:48 »

Задача стоит получить 1000 виджетов или получить некоторый внешний вид?

Думаю в QScrollArea все нормально сделано, только видимая и отрисовывается. Проблема очевидно в другом.

Думай еще в сторону делегата. И еще. И еще. И модели соответственно.

Выложи картинку того, что ты хочешь получить.
Записан
antipart
Гость
« Ответ #5 : Январь 05, 2012, 14:04 »

Да задача стоит получить много активных виджетов (обычный большой график дежурств на 9-10 человек) с возможностью ставить
снимать дежурства менять людей из выпадающего списка, менять количество часов и тарифную ставку для каждого дежурства и
в зависимости от дня недели + различная доп. информация в виде пристыкованных таблиц и шапок слева и сверху.
+ кнопки "Применить", "Сгенерить", "Очистить"...
Т.е. виджет сам по себе очень громоздкий (тянет на полноценное диалоговое окно), а тут надо еще и все сразу на одной вкладке
QTabWidget, типа как в Exel
Записан
BRE
Гость
« Ответ #6 : Январь 05, 2012, 14:04 »

1. понятно что изврат, и это не мое проектирование, задача так стоит и не иначе... уже голову сломал
Видать, те люди, которые должны будут работать с этой программой, очень сильно насолили этому проектировщику... Могут все таки у нас юзабилите продумать качественно... Улыбающийся

Честно говоря лично таких экспериментов не проводил, но QScrollArea со своими наследниками + делегаты должны нормально справляться с отрисовкой всего этого. Все таки большие таблицы и списки отрисовываю нормально.
Записан
antipart
Гость
« Ответ #7 : Январь 05, 2012, 14:15 »

Видать, те люди, которые должны будут работать с этой программой, очень сильно насолили этому проектировщику... Могут все таки у нас юзабилите продумать качественно... Улыбающийся

да нет.. все проще проектировщик и пользователь - одно лицо  Подмигивающий
долго ему пытались объяснить  что это через одно место... 
Я так хочу и все...  у него все эти графики в Экселе живут, теперь он решил это все оживить программно, но чтобы
непременно было как в Эксель - типа привык...

вот вырезал один
Записан
andrew.k
Гость
« Ответ #8 : Январь 05, 2012, 14:20 »

Я почему-то вижу тут один виджет QTableView и никак не вижу 1000 виджетов! А вы?
Записан
mutineer
Гость
« Ответ #9 : Январь 05, 2012, 14:22 »

Так а зачем обязательно
Цитировать
~300 виджетов(по количеству дней в месяце для каждогоQLineEdit )
? Почему надо сразу 300 активных виджетов, а не подставлять виджет в ячейку, на которую кликнули, а без клика просто текст показывать? Эксель же не держит на форме своей 500к лайнэдитов, а подставляет один в нужную ячейку;)
Записан
antipart
Гость
« Ответ #10 : Январь 05, 2012, 14:25 »

Я почему-то вижу тут один виджет QTableView и никак не вижу 1000 виджетов! А вы?
так я один и вырезал и  документа , таких таблиц на одной вкладке и должно быть много
Записан
andrew.k
Гость
« Ответ #11 : Январь 05, 2012, 14:27 »

Я почему-то вижу тут один виджет QTableView и никак не вижу 1000 виджетов! А вы?
так я один и вырезал и  документа , таких таблиц на одной вкладке и должно быть много
Вот это жесть!  Шокированный
Каким образом интересно? Монитор 100 дюймов?

Я просил скрин не документа, а того как это должно выглядеть в интерфейсе.
Записан
andrew.k
Гость
« Ответ #12 : Январь 05, 2012, 14:33 »

А зачем кстати вкладки? Вкладки портят концепцию.
Их убрать и зах**ить 10000 виджетов на одну форму)
Записан
antipart
Гость
« Ответ #13 : Январь 05, 2012, 14:38 »

Цитировать
Вот это жесть!  Шокированный
Каким образом интересно? Монитор 100 дюймов?
да именно это слово  Улыбающийся
вот здесь и надо их скроллить...

Цитировать
Я просил скрин не документа, а того как это должно выглядеть в интерфейсе.
так и должно выглядеть в интерфейсе....
только почти все элементы таблицы активные...
т.е. где ФИО там лайЕдиты с  Автокомплетами по всем дежурным в БД
там где собственно клеточки дежурств нужно назначать или снимать смены (через контекстное меню и QCheckBox)
менять часы и тарифы тоже для каждой клеточки дежурств и т.д.
Записан
antipart
Гость
« Ответ #14 : Январь 05, 2012, 14:46 »

А зачем кстати вкладки? Вкладки портят концепцию.
Их убрать и зах**ить 10000 виджетов на одну форму)
На других вкладках другая информация не имеющая отношения к проблеме (например отчеты или редакция дежурных и т.д.)
Графики дежурств на одной вкладке, т. е. на одном виджете афигенного размера, который и надо скроллить
ну или как я уже писал есть варианты : на одной сцене , или в одной вьюхе  у которых скролл встроенный

Так вот только в случае со сценой (при переходе на вкладку с графиками) нет тормозов все четко и быстро скроллится
а в других вариантах надо подождать несколько минут(30видж. ~2min) после клика на вкладке и собственно отображением содержимого вкладки
Записан
Страниц: [1] 2 3 ... 5   Вверх
  Печать  
 
Перейти в:  


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