2016-08-02 55 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相當於船的「真實世界」單位(地球表面上這裏十進制度)。

事情現在像一個魅力工作。