2016-08-02 5 views
0

У меня возникают проблемы с масштабированием - я подозреваю, что у меня что-то не хватает ... возможно, кто-то мог бы установить меня прямо.Проблемы с реальным масштабом в мире с QGraphicsView/QGraphicsItem

Я использую QGraphicsScene и QGraphicsView для отображения положения лодки с использованием широты и долготы в десятичных градусах. Для непосвященных позиций выглядит следующим образом:

LON: -71,34253 LAT: 41,549886

Этих позиции я устанавливаю для моих пользовательских объектов QGraphicsItem. Это координаты «реального мира».

Мои проблемы: я не могу показаться, чтобы мои объекты отображались правильно, и я подозреваю, что не понимаю, какую шкалу я должен использовать, когда рисую функцию paint().

Я использую Qt через PyQt, но это должно быть то же самое, нет? Вот мой пользовательский класс, который представляет собой позицию.

class myGraphicsFix(QGraphicsItem): 

    def __init__(self): 
      super().__init__() 

      self.lat = 0.0 
      self.lon = 0.0 

      self.boatlength = 1.5696e-6 # assuming 6371 km earth diameter, 10 m boat length 

    def setLatLon(self, tlat, tlon): 
      self.lat = tlat 
      self.lon = tlon 
      self.setPos(self.lat, self.lon) 

    def paint(self, painter, option, widget): 
      pen = QPen(Qt.SolidLine) 
      pen.setColor(Qt.black) 
      pen.setWidth(0.0) 
      painter.drawPoint(QPointF(0.0,0.0)) 

    def boundingRect(self): 
      return QRectF(-self.boatlength/2.0,-self.boatlength/2.0, +self.boatlength/2.0, self.boatlength) 

Когда этот код работает все, что я получаю твердый блок черного цвета, это означает, что каким-то образом мои очки втягиваются как гигантские квадраты. Если я заменил drawPoint на drawEllipse() следующим образом:

painter.drawEllipse(-self.boatlength/2.0,-self.boatlength/2.0, self.boatlength, self.boatlength) 

Ничего не нарисовано вообще. Любые мысли?

Tom.

+0

В первом случае вы создаете ручку ширины линии 0 и не используете ее. Как вы что-то получаете? Во втором случае вы рисуете эллипс очень маленького радиуса с большим координатным центром. Как вы пытаетесь его найти? – ilotXXI

+0

Спасибо ilotXXI. Ручка в моем первом случае осталась без наличия кода drawEllipse. Вы правы, что код drawEllipse странный - я изменил его на 0,0 и половину длины лодки для радиусов X и Y, но я все равно получаю то же самое. Мой вопрос действительно в том, что я должен использовать радиусом? Координаты реального мира? –

ответ

1

Рад ответить на мой собственный вопрос ...

Да, масштаб, который будет использоваться в QGraphicsItem является «реальным миром» масштаб.

Проблема, с которой я столкнулась, состояла в том, что я не вызывал функцию drawEllipse должным образом. Вот очищенный код, который работает. Обратите внимание на объект QPointF() в аргументе.

def paint(self, painter, option, widget): 
      pen = QPen() 
      pen.setWidth(0) 
      painter.setPen(pen) 
      painter.drawEllipse(QPointF(0.0,0.0), +self.boatlength/2.0, self.boatlength/2.0) 

Обратите внимание, что в методе __init__() меня self.boatlength = 0.00001, который соответствует лодке в «реальном мире» единиц (в данном случае десятичных градусов на поверхности земли).

Вещи теперь работают как шарм.