Название: Рисовать миллиметровку Отправлено: ltise от Февраль 15, 2011, 14:17 Привет всем!
Возникла задача рисовать миллиметровку (и другие варианты мелкой сетки) в бэкраунде рабочей области приложения...Приложение НЕ использует Scene\View, отрисовка ведется прямо в виджет через QPainter, области отрисовки строго отслеживаются..Соответсвенно, миллиметровку тоже надо рисовать "руками" при каждой перерисовке рабочей области, и соотв. при скроле и зуме...если перерисовываются небольшие участки то проблем нет... Но ! как мне кажется, что при большой рабочей области тупое рисование линиями этой самой миллиметровки будет сильно тормозить, особенно на больших мониторах... И это будет особенно заметно при анимированом "плавном" скроллинге и зуме... линии сетки имеют осмысленную нагрузку, поэтому просто сделать заливку думаю не получится... Может есть опыт/идеи как лучше решить подобную задачу ? ЗЫ. еще не пробовал никак.. может и просто линиями прокатит... Название: Re: Рисовать миллиметровку Отправлено: GreatSnake от Февраль 15, 2011, 14:24 Можно заливать тайлами. См. QBrush::setTexture(), но не факт, что будет быстрее.
Название: Re: Рисовать миллиметровку Отправлено: ltise от Февраль 15, 2011, 14:33 Можно заливать тайлами. См. QBrush::setTexture() Тоже думаю попробовать заливкой, но сразу возникает вопрос - попасть линией заливки в нужную точку получится ? Т.е. если рабочая область сдвинется на N пикселей вправо, то вертикальные линии сетки тоже должны сдвинуться вправо на N пикселей Название: Re: Рисовать миллиметровку Отправлено: GreatSnake от Февраль 15, 2011, 15:25 Цитировать попасть линией заливки в нужную точку получится ? Что такое "линия заливки"?Название: Re: Рисовать миллиметровку Отправлено: ltise от Февраль 15, 2011, 16:06 Цитировать попасть линией заливки в нужную точку получится ? Что такое "линия заливки"?Название: Re: Рисовать миллиметровку Отправлено: GreatSnake от Февраль 15, 2011, 16:11 Хм, вы знаете что такое тайлы?
Название: Re: Рисовать миллиметровку Отправлено: ltise от Февраль 15, 2011, 16:41 Хм, вы знаете что такое тайлы? Сорри, тайлы или файлы ?Название: Re: Рисовать миллиметровку Отправлено: GreatSnake от Февраль 15, 2011, 16:44 тайлы, конечно. А вы можете заливать содержимое окна файлами? :)
Название: Re: Рисовать миллиметровку Отправлено: ltise от Февраль 15, 2011, 17:00 тайлы, конечно. А вы можете заливать содержимое окна файлами? :) Конечно могу - могу растровыми файлами могу векторами или и теми и другими, на крайняк можно текстом залить, любой может :)Одним словом - Вы предлагаете считать для миллиметровки минимальный растровый примитив (tile) и использовать его в заливке ? при изменении масштаба, соотв. пересчитывать новый... попробую Название: Re: Рисовать миллиметровку Отправлено: xokc от Февраль 15, 2011, 20:42 На Delphi рисовал линиями по битмапу и потом битмап на экран - проблем с производительностью не было никаких и никогда. Скроллинг делал с помощью штатных scrollUp, scrollDown, scrollLeft, scrollRight. В Qt именно сетку рисовать не пробовал, но битмапы тоже выводятся ну очень быстро. Короче, проще попробовать и посмотреть.
Название: Re: Рисовать миллиметровку Отправлено: kamre от Февраль 16, 2011, 03:37 Скроллинг делал с помощью штатных scrollUp, scrollDown, scrollLeft, scrollRight. Да со скролингом то понятно, а вот как zoom делать быстро?Название: Re: Рисовать миллиметровку Отправлено: kdm от Февраль 16, 2011, 10:28 Может я тут везде глупости пишу, но в paintEvent (QPaintEvent*) в QPaintEvent если в region хранится локальный регион который стал invalid нуждается в перерисовки и вычислять учитывая шаг, зум, перерисовывать конкретный регион вычислив смещение и также рисовать сетку. Тоже как-то заморачивался с сеткой только в QGLWidget. Рисовать надо было не во всю область а только под смещение.
|