基于Scene与View实现图元对象创建、绘制与显示、拖动支持。当前支持常见的图元类型包含:
QGraphicsRectItem
QGraphicsTextItem
QGraphicsLineItem
QGraphicsPathItem
QGraphicsPixmapItem
QGraphicsEllipseItem
下面的演示实现了图元绘制与Scene创建,以及自定义View类显示。
1from PyQt5 import QtWidgets
2from PyQt5 import QtCore
3from PyQt5 import QtGui
4import cv2 as cv
5import sys
6
7
8class CanvasPanel(QtWidgets.QGraphicsView):
9 def __init__(self, parent=None):
10 super().__init__(parent)
11 print("create my custom QGraphicsView...")
12 self.scene = QtWidgets.QGraphicsScene(0, 0, 800, 600)
13 self.setScene(self.scene)
14 self.create_items()
15
16 def create_items(self):
17 item1 = QtWidgets.QGraphicsRectItem(0, 0, 100, 50)
18 brush = QtGui.QBrush(QtCore.Qt.red)
19 item1.setBrush(brush)
20 item1.setPos(350, 300)
21
22 item3 = QtWidgets.QGraphicsRectItem(0, 0, 100, 50)
23 brush = QtGui.QBrush(QtCore.Qt.red)
24 item3.setBrush(brush)
25 item3.setPos(200, 300)
26 item3.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable | QtWidgets.QGraphicsItem.ItemIsSelectable)
27
28 item2 = QtWidgets.QGraphicsTextItem("OpenCV学堂@gloomyfish")
29 font = QtGui.QFont()
30 font.setBold(True)
31 font.setPointSizeF(32)
32 item2.setFont(font)
33 item2.setPos(50, 100)
34
35 self.scene.addItem(item1)
36 self.scene.addItem(item2)
37 self.scene.addItem(item3)
38
39
40