0
我想知道如何用qgraphicsscene中標記的三點繪製橢圓。說如果用戶使用mousePress選擇場景中的三個點,我會用標記突出顯示按下的點。現在使用三個標記,我必須圍繞這三個標記繪製一個橢圓,或者將這些點作爲我繪製的橢圓的邊界。 用場景中的特定點繪製橢圓
執行painterpath drawEllipse將工作..?
我想知道如何用qgraphicsscene中標記的三點繪製橢圓。說如果用戶使用mousePress選擇場景中的三個點,我會用標記突出顯示按下的點。現在使用三個標記,我必須圍繞這三個標記繪製一個橢圓,或者將這些點作爲我繪製的橢圓的邊界。 用場景中的特定點繪製橢圓
執行painterpath drawEllipse將工作..?
我曾與PySide類似的問題。你可以很容易地在C++適應此代碼:
def paintEvent(self, ev):
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 4))
painter.drawPoint(self.a)
painter.drawPoint(self.b)
painter.drawPoint(self.c)
# 1. Find the long axis.
maxL = max(QLineF(self.a, self.b), QLineF(self.a, self.c), QLineF(self.b, self.c), key=lambda x: x.length())
center = maxL.pointAt(0.5)
# 2. Find the small axis
if maxL == QLineF(self.a, self.b):
c = self.c
elif maxL == QLineF(self.a, self.c):
c = self.b
else:
c = self.a
w = maxL.length()
h = QLineF(c, center).length() * 2.0
# 3. Define the bounding rect for our ellipse
rect = QRect(-w/2.0, -h/2.0, w, h)
# 4. Rotate the painter and draw the ellipse
painter.translate(center.x(), center.y())
painter.rotate(-maxL.angle())
painter.setPen(Qt.black)
painter.drawEllipse(rect)
的目標是計算橢圓考慮到這三個點是兩個軸的端部的邊界矩形。
所以,第一步找到較長的軸。第二步找到小軸。
矩形由軸的長度定義,我們只需要旋轉畫家繪製我們的橢圓。
一個更好的解決方案應該存在,但雷似乎工作,時刻...
編輯:它的快速和骯髒。所以,它不適用於很多情況。 更好的解決方案將使用該屬性:對於橢圓上的每個點,點與兩個靜態點之間的距離之和是恆定的。因此,可以計算這個距離並確定另外兩個點並確定兩個軸。
它運作良好。我面臨着找到最大中線的問題,當我定義自己固定它的工作。但我仍然不知道如何使用正常的qt找到最大中線。 – Wagmare