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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование больших карт в qt (чем и на чем ?)  (Прочитано 4021 раз)
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 или чем то более быстрым ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 28, 2015, 08:35 »

Карты могут менять размер при нажатии Zoom. Причем аж в 8 раз.
Размер базовой карты 800 x 800 пикселей размером 24 бит, что весит 1.83 Мб в ОЗУ.  
Соответственно максимальный холст при максимальном масштабе 8 занимает матрицу 6400 x 6400 пикселей и весит = 117.2 Мб в ОЗУ.
Эта логика не верна, для рисования не нужно увеличивать сам имедж, он может быть тем же 1.83 Мб. Простейший способ - вставить картинку в QScrollArea и менять размер QScrollArea::widget, но при рисовании использовать оригинал
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #2 : Август 28, 2015, 12:06 »

Эта логика не верна, для рисования не нужно увеличивать сам имедж, он может быть тем же 1.83 Мб. Простейший способ - вставить картинку в QScrollArea и менять размер QScrollArea::widget, но при рисовании использовать оригинал
Не имеет особого значения, кто будет масштабировать исходную картинку: разработчик руками или оставит это Qt. Можно самому масштабиовать только видимую часть картинкию
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Август 28, 2015, 13:31 »

картинка статичная? если есть динимика или нужно выбирать мышью объекты на карте - читайте про QGraphicsView/QGraphicsScene.
Записан
alik
Гость
« Ответ #4 : Август 28, 2015, 22:55 »

картинка статичная? если есть динимика или нужно выбирать мышью объекты на карте - читайте про QGraphicsView/QGraphicsScene.

Да картинку можно двигать влево-вправо и вверх-вниз с помощью мыши, на ней вибирается с помощью мыши отрезок по которому строятся в другом месте разрезы, на ней можно рисовать мышкой разные полигоны и т.д.

Правильно ли я понимаю, что QGraphicsView/QGraphicsScene более быстрые холсты для рисования ?
Можно ли в них делать скроллы по вертикали и горизонтали ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 29, 2015, 06:09 »

Правильно ли я понимаю, что QGraphicsView/QGraphicsScene более быстрые холсты для рисования ?
Нет, как "холсты" (устаревший термин) они гораздо медленнее, но имеют массу вкусных плюшек для операций с примитивами (QGraphicsItem).

Можно ли в них делать скроллы по вертикали и горизонтали ?
Это делается автоматом везде. Собственно показ скроллируемой/масштабируемой картинки - час работы (если в первый раз). Долго раскачиваетесь  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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