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)

 

參考資料

1. Graphics 系列介紹

2. QGraphicsView,QGraphicsScene和QGraphicsItem

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(0) 人氣()