2016-08-02 77 views
0

真实世界的规模问题我有一些缩放问题 - 我怀疑我错过了一些东西...也许有人可以设置我直。QGraphicsView/QGraphicsItem

我正在使用QGraphicsScene和QGraphicsView以十进制度的经度和纬度显示船的位置。对于未启动的位置是这样的:

LON:-71.34253纬度:41.549886

这是我设置为我定制的QGraphicsItem对象的位置。这些是“真实世界”坐标。

我的问题是我似乎无法让我的对象正确显示,我怀疑我不理解我在绘制paint()函数时应该使用的比例。

我通过PyQt使用Qt,但这应该是相同的,不是吗?这是我自定义的类,代表一个位置。

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) 

运行此代码时我得到的是黑色的固体块,这意味着不知我的点被绘制巨型广场。如果我用drawEllipse()替换drawPoint,如下所示:

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

没有任何东西被绘制......任何想法?

汤姆。

+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相当于船的“真实世界”单位(地球表面上这里十进制度)。

事情现在像一个魅力工作。