Использование QGraphicsView для отображения локальной карты

Я пытаюсь использовать QGraphicsView, чтобы отобразить изображение карты и нарисовать некоторые элементы поверх него. Границы карты указаны в декартовой системе координат, например, с северо-востока (-500 200) до юго-запада (600, -350). Я знаю, как отображать пиксели изображения ‹--> моя система координат.

Я должен был бы добиться следующего:

  1. Добавьте изображение карты в сцену и сообщите Qt, как отображать фактические пиксели изображения в координаты сцены.
  2. Добавляйте графические элементы в их реальное положение, например. (-100,200)

Выполнение (2) простое — просто добавьте элемент на сцену. Как мне достичь (1)? что мне делать после вызова scene->addPixmap()?

Изменить. Несколько пояснений:

  • Я наношу на карту внутреннюю территорию в несколько сотен метров
  • The map will change at real-time in two ways:
    • The map gets bigger every few seconds
    • Графические элементы перемещаются, меняют цвет и т. д.

person kshahar    schedule 06.12.2010    source источник


Ответы (1)


  1. Поместите растровое изображение в QGraphicsPixmapItem и поместите его в сцену.
  2. Вызовите setScale(), чтобы сопоставить QGraphicsPixmapItem, чтобы карты с шагом 1 метр на 1 единицу в координате сцены. т.е. setScale(0.1), если 10 пикселей в растровом изображении равны 1 метру.
  3. При необходимости обновите растровое изображение и масштаб элемента.
  4. Вызовите fitInView(), чтобы увеличить растровое изображение.
  5. Разместите другие графические элементы в сцене. Рассматривайте единицы координат сцены как метры.
  6. ...
  7. Выгода! :)
person Stephen Chu    schedule 06.12.2010
comment
Спасибо! Это работает, но я не уверен в части fitInView() - изображение растягивается и выглядит искаженным. - person kshahar; 07.12.2010