QGraphicsView / QGraphicsItem的真实世界规模问题

时间:2016-08-02 19:33:22

标签: qt pyqt qgraphicsview qgraphicsitem qgraphicsscene

我有一些缩放问题 - 我怀疑我错过了一些东西......也许有人可以让我直截了当。

我使用QGraphicsScene和QGraphicsView以十进制度数的纬度和经度显示船的位置。对于未启动的头寸,这些头寸如下:

LON:-71.34253 LAT: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)

根本没有画出来......有什么想法吗?

汤姆。

1 个答案:

答案 0 :(得分: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对应于现实世界中的船只#34;单位(这里是地球表面的十进制度数。)

现在的事情就像一个魅力。