专栏名称: OpenCV学堂
一个致力于计算机视觉OpenCV原创技术传播的公众号!OpenCV计算机视觉与tensorflow深度学习相关算法原创文章分享、函数使用技巧、源码分析与讨论、,计算机视觉前沿技术介绍,技术专家经验分享,人才交流,学习交流。
51好读  ›  专栏  ›  OpenCV学堂

PyQt5中使用图元实现高效绘制场景

OpenCV学堂  · 公众号  ·  · 2024-05-09 17:20

正文

点击上方 蓝字 关注我们

微信公众号: OpenCV开发者联盟

关注获取更多计算机视觉与深度学习知识

Qt图形视图框架介绍

Qt图形视图框架(Qt Graphics View Framework)支持开发快速高效的2D矢量图形场景。场景可以包含数百万个对象,每个对象都有自己的功能和行为。通过使用 PyQt 的图形视图,您可以在 Python 中访问这个高性能的图形层。无论您是将矢量图形视图集成到现有的 PyQt 应用程序中,还是只是想要一个强大的 Python 矢量图形界面,Qt 的图形视图都是您正在寻找的。

Qt图形视图的一些常见用途包括数据可视化、2D流程化设计工具、2D数据仪表板、2D 游戏等领域。

Qt图形视图框架组件

Qt图形视图框架是基于Model-View的架构实现的,主要包含三个相关Qt对象组件分别是:
QGraphicsViewQGraphicsScene QGraphicsItem
三个组件的作用与角色都有不同的定位与使用方法。其中 QGraphicsScene可以看成是Model-View架构中的Model部分 QGraphicsView可以看成是Model-View架构中的View部分 ;每个Scene绑定到多个View、QGraphicsItem可以是Model的一部分、表示的是各种图元对象,最终都需要添加到Scene中,然后跟View绑定以后才可以显示出来。
QGraphicsScene主要的功能有以下:
- 负责检测图元对象是否重叠跟交会- 负责图元选择与编辑管理- 负责查找与发现图元对象跟位置- 负责接受信号事件并传递给图元

Qt图形视图框架使用

基于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(00800600)
13        self.setScene(self.scene)
14        self.create_items()
15
16    def create_items(self):
17        item1 = QtWidgets.QGraphicsRectItem(0010050)
18        brush = QtGui.QBrush(QtCore.Qt.red)
19        item1.setBrush(brush)
20        item1.setPos(350300)
21
22        item3 = QtWidgets.QGraphicsRectItem(0010050)
23        brush = QtGui.QBrush(QtCore.Qt.red)
24        item3.setBrush(brush)
25        item3.setPos(200300)
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(50100)
34
35        self.scene.addItem(item1)
36        self.scene.addItem(item2)
37        self.scene.addItem(item3)
38
39
40






请到「今天看啥」查看全文