Название: Рисование больших карт в qt (чем и на чем ?) Отправлено: alik от Август 27, 2015, 21:23 Добрый вечер!
Я пришел из Дельфи, и пытаюсь переложить один серьезный проект на кути. Графическая модель очень серьезная отличается. Что мне нужно выяснить сейчас - выбрать подходящий "холст" и средства рисования карт. Карты могут менять размер при нажатии Zoom. Причем аж в 8 раз. Размер базовой карты 800 x 800 пикселей размером 24 бит, что весит 1.83 Мб в ОЗУ. Соответственно максимальный холст при максимальном масштабе 8 занимает матрицу 6400 x 6400 пикселей и весит = 117.2 Мб в ОЗУ. В дельфах я рисовал на PaintBox.Canvas с включением DoubleBuffered (чтобы не мерцало), а при необходимости сохранения карты в файл использовал класс TImage. Так как холст размером 6400 пикселей не вмещается в экран, использовал класс TScrollBox c включением скроллов по горизонтали и вертикали. Внутрь ScrollBox помещал PaintBox. Как и на чем мне лучше реализовать все это в QT5 ? Я имею ввиду рисовать на QWidget, QGraphicsView и т.д. Рисовать QPainter или чем то более быстрым ? Название: Re: Рисование больших карт в qt (чем и на чем ?) Отправлено: Igors от Август 28, 2015, 08:35 Карты могут менять размер при нажатии Zoom. Причем аж в 8 раз. Эта логика не верна, для рисования не нужно увеличивать сам имедж, он может быть тем же 1.83 Мб. Простейший способ - вставить картинку в QScrollArea и менять размер QScrollArea::widget, но при рисовании использовать оригинал Размер базовой карты 800 x 800 пикселей размером 24 бит, что весит 1.83 Мб в ОЗУ. Соответственно максимальный холст при максимальном масштабе 8 занимает матрицу 6400 x 6400 пикселей и весит = 117.2 Мб в ОЗУ. Название: Re: Рисование больших карт в qt (чем и на чем ?) Отправлено: Old от Август 28, 2015, 12:06 Эта логика не верна, для рисования не нужно увеличивать сам имедж, он может быть тем же 1.83 Мб. Простейший способ - вставить картинку в QScrollArea и менять размер QScrollArea::widget, но при рисовании использовать оригинал Не имеет особого значения, кто будет масштабировать исходную картинку: разработчик руками или оставит это Qt. Можно самому масштабиовать только видимую часть картинкиюНазвание: Re: Рисование больших карт в qt (чем и на чем ?) Отправлено: Fregloin от Август 28, 2015, 13:31 картинка статичная? если есть динимика или нужно выбирать мышью объекты на карте - читайте про QGraphicsView/QGraphicsScene.
Название: Re: Рисование больших карт в qt (чем и на чем ?) Отправлено: alik от Август 28, 2015, 22:55 картинка статичная? если есть динимика или нужно выбирать мышью объекты на карте - читайте про QGraphicsView/QGraphicsScene. Да картинку можно двигать влево-вправо и вверх-вниз с помощью мыши, на ней вибирается с помощью мыши отрезок по которому строятся в другом месте разрезы, на ней можно рисовать мышкой разные полигоны и т.д. Правильно ли я понимаю, что QGraphicsView/QGraphicsScene более быстрые холсты для рисования ? Можно ли в них делать скроллы по вертикали и горизонтали ? Название: Re: Рисование больших карт в qt (чем и на чем ?) Отправлено: Igors от Август 29, 2015, 06:09 Правильно ли я понимаю, что QGraphicsView/QGraphicsScene более быстрые холсты для рисования ? Нет, как "холсты" (устаревший термин) они гораздо медленнее, но имеют массу вкусных плюшек для операций с примитивами (QGraphicsItem).Можно ли в них делать скроллы по вертикали и горизонтали ? Это делается автоматом везде. Собственно показ скроллируемой/масштабируемой картинки - час работы (если в первый раз). Долго раскачиваетесь :) |