crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Оптимизация перерисовки виджета при изменении его геометрии
Obey-Kun
  опции профиля:
сообщение 23.11.2010, 1:51
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


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

Там сцена и вью. В сцене лежит много-много кирпичиков. Кирпичики надо иногда, например, выделять. Для этого используется прямоугольное выделение. Прямоугольное выделение представлено как виджет, рисующийся во вьюпорте вью.

Проблема в том, что при изменении геометрии выделения (размеров или положения этого виджета), пускается paintEvent для области, являющейся окаймляющей старую и новую геометрию. При этом перерисовываются все кирпичики, лежащие и лежавшие только что под этим виджетом. А это долго, если их много (заметно от 1500).

Можно ли как-нибудь самому задавать QRegion, в котором должен пускаться paintEvent при resize/move?

Вот скриншот (для вашего вдохновения): тыц

Сообщение отредактировал Obey-Kun - 23.11.2010, 2:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 23.11.2010, 2:50
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


По отсечке региона сейчас не подскажу, голова совсем не работает. Просто вопрос - а почему было выбрано именно GV?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 23.11.2010, 2:55
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


А что вы бы использовали? По сути я работаю с набором кирпичиков, каждый кирпичик обладает геометрией и всякими свойствами (температура, теполоёмкость, ...). Использование связки Scene-View наиболее логично. Или я вопроса не понял?

Вот что нашёл -- http://lists.trolltech.com/qt-interest/200...ead00848-0.html
Но тоже уже голова не варит, потом почитаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 23.11.2010, 3:11
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Да вручную QPainter'ом отрисовку, с кучей мелких элементов в GV посложнее будет в плане оптимизации скорости.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 23.11.2010, 3:26
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


Кирпичики в сцене находятся. Выделение -- во view. Но вы мне только что идею подкинули. Ведь действительно лучше хранить и инструменты в сцене тоже, ведь это автоматически избавит от некоторых проблем оптимизации перерисовки. Только есть проблема с тем, что текст и ушки, за которые мы цепляем инструмент, должны рисоваться вне масштаба. Как этого добиться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 23.11.2010, 8:28
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2900
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Obey-Kun, такая картинка для отрисовки на самом завалящем калькуляторе - фигня-задача. Сталкивались, знаем. Вывод - у тебя что-то неоптимально сделано :)

Уж не знаю, что там за сцена такая (не сталкивался) , но когда содержишь свой массив/вектор/мапу с объектами, онм рисуются очень живенько. Ну, тут тоже, смотря как алгоритм сделаешь

Сообщение отредактировал Алексей1153 - 23.11.2010, 8:30
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 23.11.2010, 14:29
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


Всё там хорошо с отрисовкой кирпичиков. QGraphicsRectItem отрисовывается не шибко быстрее, чем мои кирпичики.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 23.11.2010, 14:37
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2900
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Я говорю про ручную отрисовку, без всяких вспомогательных классов :) Объекту-кирпичику можно передавать указатель на паинтер+прямоугольник, где рисоваться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 23.11.2010, 15:20
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


Тут речь не о том совсем, а о QGraphicsScene+QGRaphicsView.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.9.2020, 3:26