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

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

Страниц: 1 [2] 3 4 5   Вниз
  Печать  
Автор Тема: Размещение множества сложных виджетов  (Прочитано 22380 раз)
BRE
Гость
« Ответ #15 : Январь 05, 2012, 14:50 »

а в других вариантах надо подождать несколько минут(30видж. ~2min) после клика на вкладке и собственно отображением содержимого вкладки
Ох, что-то ты не то делаешь. Нарисовать 30 виджетов это так... пустяк. Какие могут быть 2 минуты?  Шокированный
Покажи как ты все делаешь для QScrollArea.
Записан
antipart
Гость
« Ответ #16 : Январь 05, 2012, 15:05 »

Цитировать
Ох, что-то ты не то делаешь. Нарисовать 30 виджетов это так... пустяк. Какие могут быть 2 минуты?
эт точно, когда только 30..
а когда каждый еще включает в себя еще ~500 и более виджетов тут интереснее Шокированный

как делаю в случае со QScrollArea...
мне проще это на словах описать, т.к. генерится это в разных местах + с анализом QDate + БД и т.д. но смысл такой...

создаю QWidget в нем QGridLayout  в лэйауте размещаю 9 полосок из QLineEdit + кастомный виджет, который представляет собой тоже полоску из маленьких клеточек-виджетов(дежурств) 30-31шт (по количеству дней в месяце) каждая клеточка-виджет включает в себя QCheckBox + 2QLabel+контекстное меню для управления клеточкой(вызов доп. диалогов и т.д.)

далее пихаю в QScrollArea
Код:
    QScrollArea *area = new QScrollArea();
    area->setFrameStyle(QFrame::NoFrame);
    area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    area->setWidget(table);
Записан
mutineer
Гость
« Ответ #17 : Январь 05, 2012, 15:07 »

Возможно прога спотыкается не на попытке нарисовать, а на попытке разместить все это замечательное хозяйство, то бишь при работе лейаутов все тормозит
Записан
antipart
Гость
« Ответ #18 : Январь 05, 2012, 15:10 »

забыл еще раз сказать, что QScrollArea пихаю виджет с 30-ю такими таблицами
Записан
antipart
Гость
« Ответ #19 : Январь 05, 2012, 15:14 »

Возможно прога спотыкается не на попытке нарисовать, а на попытке разместить все это замечательное хозяйство, то бишь при работе лейаутов все тормозит
создаю пока все это в конструкторе, а не постоянно... ибо так проще прикрыть каким-нибудь splash при запуске приложения
при выводе через qDebug()<<table->id;
вижу что достаточно медленно, но не очень критично...
а дальше проблемы именно с отрисовкой т.к. при попытке перейти на вкладку уже все создано... Грустный
Записан
andrew.k
Гость
« Ответ #20 : Январь 05, 2012, 15:16 »

Я никак не пойму, чем тебя не устраивает модель+делегат+вьюха?
Записан
andrew.k
Гость
« Ответ #21 : Январь 05, 2012, 15:22 »

Меня всегда убивали такие монструозные экселевские таблицы.
Сначала один человек сидит и выносит себе мозг. Потом выносит еще кому-то мозг.

Потом он решает это напечатать, снова выносит себе мозг.
Потом, распечатав, он несет это несчастному кому-то и выносит мозг уже ему.

А потом приходит новый сотрудник, и старый заставляет его делать так же.
А потом спустя ..дцать лет, новый сотрудник уже во всю клепает такие же и выносит мозг новичкам.

А потом все они не хотят по-другому, потому что они "привыкли так".

Как это остановить? )
Записан
BRE
Гость
« Ответ #22 : Январь 05, 2012, 15:32 »

Возможно прога спотыкается не на попытке нарисовать, а на попытке разместить все это замечательное хозяйство, то бишь при работе лейаутов все тормозит
Кстати, здравая мысль, возможно тормоза начинаются на этапе расчета геометрии. Хорошо бы это проверить...
Правда пока не представляю как можно сделать этот расчет единожды и применить для всех одинаковых виджетов. Возможно придется писать свой компоновщик для этого.
Записан
antipart
Гость
« Ответ #23 : Январь 05, 2012, 15:35 »

Я никак не пойму, чем тебя не устраивает модель+делегат+вьюха?
я уже писал на эту тему ....
исходя из того, что мне нужны активные виджеты...
есть (на мой взгяд) два варианта с делегатом
1. это использовать для всех
 
Код:
for (int i = 0; i < objModel->rowCount(QModelIndex()); ++i)
            view->openPersistentEditor(objModel->index(i, 0, QModelIndex()));
2.
Цитировать
еще думал в сторону QItemDelegate:  в методе paint рисованием пытаться сдублировать весь этот большой гарфик дежурств
а потом на createEditor активировать сам виджет, но это геморрой еще тот... (тут же еще надо чтобы они совпадали)

вариант 1 пробовал т.к. реализовать проще , та же хрень как и со QScrollArea... нет вру чуть лучше, но тоже тормозит
при отрисовке

вариант 2 не пробовал - боюсь даже приступать ради того чтобы попробовать... уж слишком... поэтому и спросил может
кто нечто делал или может есть еще варианты  Грустный
Записан
antipart
Гость
« Ответ #24 : Январь 05, 2012, 15:37 »

Цитировать
Кстати, здравая мысль, возможно тормоза начинаются на этапе расчета геометрии. Хорошо бы это проверить...
Правда пока не представляю как можно сделать этот расчет единожды и применить для всех одинаковых виджетов. Возможно придется писать свой компоновщик для этого.
уже интереснее... Улыбающийся скорее всего так и есть ... потому что повторный клик на вкладке работает заметно быстрее...
Записан
andrew.k
Гость
« Ответ #25 : Январь 05, 2012, 15:53 »


вариант 1 пробовал т.к. реализовать проще , та же хрень как и со QScrollArea... нет вру чуть лучше, но тоже тормозит
при отрисовке
Очень странно. Чему там тормозить? Обычные текстовые строчки.

Поищи похожую тему на форуме. Там было какое-то решение вроде бы для этого.
Записан
antipart
Гость
« Ответ #26 : Январь 05, 2012, 16:03 »

Цитировать
Очень странно. Чему там тормозить? Обычные текстовые строчки.
имеется в виду что график показывать только например при клике(view->openPersistentEditor), а так просто строчки?
я правильно понял?
если да.. можно конечно попытаться склонить к этому решению... задача стоит ведь чтобы все сразу таблицы были видны  и активны
а потом если наоткрывать этих едиторов опять будут тормоза...
 у меня была мысль как-то на скролле открывать и закрывать едиторы... пока ее не развивал
Записан
mutineer
Гость
« Ответ #27 : Январь 05, 2012, 16:06 »

задача стоит ведь чтобы все сразу таблицы были видны  и активны

Редактировать все равно можно только один виджет одновременно Улыбающийся
Записан
antipart
Гость
« Ответ #28 : Январь 05, 2012, 16:08 »

Цитировать
Редактировать все равно можно только один виджет одновременно
да это понятно... но надо чтобы другие были хотя-бы видны (а не просто строчки)
Записан
andrew.k
Гость
« Ответ #29 : Январь 05, 2012, 16:12 »

Цитировать
Очень странно. Чему там тормозить? Обычные текстовые строчки.
имеется в виду что график показывать только например при клике(view->openPersistentEditor), а так просто строчки?
я правильно понял?
если да.. можно конечно попытаться склонить к этому решению... задача стоит ведь чтобы все сразу таблицы были видны  и активны
а потом если наоткрывать этих едиторов опять будут тормоза...
 у меня была мысль как-то на скролле открывать и закрывать едиторы... пока ее не развивал

Нет, я о другом говорил.
Твоя таблица (во вложении). Что в ней сложного? Все данные текстовые, ничего рисовать не нужно.
Делегат прекрасно справится с отображением и редактированием твоих данных.
И делай хоть 100 таких таблиц. Зачем все делать виджетами ума не приложу.
Записан
Страниц: 1 [2] 3 4 5   Вверх
  Печать  
 
Перейти в:  


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