close
講解影片: https://youtu.be/B4J64NmlWVA
基本的 QGraphics class 如下:
- QGraphicsView - 觀看視角
- QGraphicsScene - 場景
- QGraphicsItem - 物件主體
- QGraphicsRectItem
- QGraphicsPixmapItem
- QGraphicsObject
- QGraphicsItem
QGraphicsScene類提供繪圖場景(Scene),
場景是不可見的,是一個抽象的管理圖形項的容器,
可以向場景添加圖形項(Item),獲取場景中的某個圖形項等。
QGraphicsView提供了視圖部件,它用來使場景中的內容可視化。
提供了一個滾動條來瀏覽大的場景。
視圖接收鍵盤和滑鼠輸入並轉換為場景事件,
並進行坐標轉換後傳送給可視場景。
如何讓QGraphicsView接收滑鼠事件
1 CustomGraphicsView繼承QGraphicsView
2 override mousePressEvent、mouseReleaseEvent、mouseMoveEvent
3 event.pos()滑鼠座標
坐標轉換: mapToScene() 才能得到該圖形項(Item)在場景實際座標
class CustomGraphicsView(QGraphicsView):
def __init__(self, scene):
super().__init__(scene)
def mousePressEvent(self, event):
print(f"Mouse Pressed: {event.pos()} (Scene: {self.mapToScene(event.pos())})")
super(CustomGraphicsView, self).mousePressEvent(event)
def mouseReleaseEvent(self, event):
print(f"Mouse Released: {event.pos()} (Scene: {self.mapToScene(event.pos())})")
super(CustomGraphicsView, self).mouseReleaseEvent(event)
def mouseMoveEvent(self, event):
print(f"Mouse Moved: {event.pos()} (Scene: {self.mapToScene(event.pos())})")
super(CustomGraphicsView, self).mouseMoveEvent(event)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("Polygon Annotation")
self.setGeometry(100, 100, 800, 600)
self.scene = QGraphicsScene()
self.view = CustomGraphicsView(self.scene)
self.setCentralWidget(self.view)
參考資料
2. QGraphicsView,QGraphicsScene和QGraphicsItem
全站熱搜
留言列表