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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисовать миллиметровку  (Прочитано 10150 раз)
ltise
Гость
« : Февраль 15, 2011, 14:17 »

Привет всем!

Возникла задача рисовать миллиметровку (и другие варианты мелкой сетки) в бэкраунде рабочей области приложения...Приложение НЕ использует Scene\View, отрисовка ведется прямо в виджет через QPainter, области отрисовки строго отслеживаются..Соответсвенно, миллиметровку тоже надо рисовать "руками" при каждой перерисовке рабочей области, и соотв. при скроле и зуме...если перерисовываются небольшие участки то проблем нет... Но ! как мне кажется, что при большой рабочей области тупое рисование линиями этой самой миллиметровки будет сильно тормозить, особенно на больших мониторах...
И это будет особенно заметно при анимированом "плавном" скроллинге и зуме... линии сетки имеют осмысленную нагрузку, поэтому просто сделать заливку думаю не получится...

Может есть опыт/идеи как лучше решить подобную задачу ?

ЗЫ. еще не пробовал никак.. может и просто линиями прокатит...



Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Февраль 15, 2011, 14:24 »

Можно заливать тайлами. См. QBrush::setTexture(), но не факт, что будет быстрее.
« Последнее редактирование: Февраль 15, 2011, 14:27 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
ltise
Гость
« Ответ #2 : Февраль 15, 2011, 14:33 »

Можно заливать тайлами. См. QBrush::setTexture()
Тоже думаю попробовать заливкой, но сразу возникает вопрос -
попасть линией заливки в нужную точку получится ?

Т.е. если рабочая область сдвинется на N пикселей вправо, то вертикальные линии сетки тоже должны
сдвинуться вправо на N пикселей

Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Февраль 15, 2011, 15:25 »

Цитировать
попасть линией заливки в нужную точку получится ?
Что такое "линия заливки"?
Записан

Qt 5.11/4.8.7 (X11/Win)
ltise
Гость
« Ответ #4 : Февраль 15, 2011, 16:06 »

Цитировать
попасть линией заливки в нужную точку получится ?
Что такое "линия заливки"?
Линия миллиметровки в заливке, например вертикальная линия, соответствующая точке "0"
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Февраль 15, 2011, 16:11 »

Хм, вы знаете что такое тайлы?
Записан

Qt 5.11/4.8.7 (X11/Win)
ltise
Гость
« Ответ #6 : Февраль 15, 2011, 16:41 »

Хм, вы знаете что такое тайлы?
Сорри, тайлы или файлы ?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Февраль 15, 2011, 16:44 »

тайлы, конечно. А вы можете заливать содержимое окна файлами?  Улыбающийся
Записан

Qt 5.11/4.8.7 (X11/Win)
ltise
Гость
« Ответ #8 : Февраль 15, 2011, 17:00 »

тайлы, конечно. А вы можете заливать содержимое окна файлами?  Улыбающийся
Конечно могу  - могу растровыми файлами могу векторами или и теми и другими, на крайняк можно текстом залить, любой может Улыбающийся
Одним словом - Вы предлагаете считать для миллиметровки минимальный растровый примитив (tile) и использовать его в заливке ? при изменении масштаба, соотв. пересчитывать новый...
попробую
« Последнее редактирование: Февраль 15, 2011, 18:06 от ltise » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #9 : Февраль 15, 2011, 20:42 »

На Delphi рисовал линиями по битмапу и потом битмап на экран - проблем с производительностью не было никаких и никогда. Скроллинг делал с помощью штатных scrollUp, scrollDown, scrollLeft, scrollRight. В Qt именно сетку рисовать не пробовал, но битмапы тоже выводятся ну очень быстро. Короче, проще попробовать и посмотреть.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #10 : Февраль 16, 2011, 03:37 »

Скроллинг делал с помощью штатных scrollUp, scrollDown, scrollLeft, scrollRight.
Да со скролингом то понятно, а вот как zoom делать быстро?
Записан
kdm
Гость
« Ответ #11 : Февраль 16, 2011, 10:28 »

Может я тут везде глупости пишу, но в paintEvent (QPaintEvent*) в QPaintEvent если в region хранится локальный регион который стал invalid нуждается в перерисовки и вычислять учитывая шаг, зум, перерисовывать конкретный регион вычислив смещение и также рисовать сетку. Тоже как-то заморачивался с сеткой только в QGLWidget. Рисовать надо было не во всю область а только под смещение.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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