【Python_GraphicsView 学习笔记(一)】Graphics View框架的基本介绍

【Python_GraphicsView 学习笔记(一)】Graphics View框架的基本介绍

    • 前言
    • 正文
    • 1、Graphics View框架简介
    • 2、Graphics View框架与QPainter类的区别
    • 3、Graphics View框架的三个组成部分
    • 4、场景QGraphicsScene类
    • 5、视图QGraphicsView类
    • 6、图形项QGraphicsItem类
    • 7、Graphics View框架的坐标系统
    • 8、参考文章

前言

Qt提供了比较丰富的内置控件,可以满足常规的开发;如果想要使用自定义控件,Qt也提供了QPainter类画出各种各样的控件;但如果要绘制大量的控件或者图形,并进行相应的控制管理,如拖拽、旋转等操作时就会显得力不从心。还好Qt提供了Graphics View框架来对大量的自定义图形项进行管理与交互。

正文

本文中主要介绍什么是Graphics View框架,Graphics View框架与QPainter类的区别,Graphics View框架的三元素等;在学习Graphics View框架的过程中,发现Graphics View框架相关的文章都比较零散,因此决定将自己最近的学习进行总结记录。

1、Graphics View框架简介

Graphics View框架 是一个基于 item 的 model-view 架构 的框架,基于 item 是因为它的每一个组件都是一个 item。
Graphics View框架是一个典型的 model-view 架构,Graphics View框架提供了一个model和一个view。model是添加的各种对象,view就是观察这些对象的视口或窗口。同一个model可以由很多view从不同的角度进行观察。

2、Graphics View框架与QPainter类的区别

  1. QPainter绘图:QPainter 绘图多是采用一种面向过程的描述方式,需要在绘图设备的paintEvent()事件里编写绘图的程序,实现整个绘图过程,适合于绘制复杂性不高的固定图形,不能实现图件的选择,编辑,拖放,修改等功能。
  2. Graphics View框架:Graphics View 架构可以绘制复杂的有大量基本图形元件的图形,并且每个图形元件是可选择,可拖放和修改的,类似于矢量绘图软件的绘图功能。

3、Graphics View框架的三个组成部分

Graphics View架构主要由三个部分组成,即场景QGraphicsScene、视图QGraphicsView、图形项QGraphicsItem
其中,场景类QGraphicsScene 提供了一个用于管理位于其中的众多图形项QGraphicsItem,视图类QGraphicsView 用于显示场景中的图形项QGraphicsItem,一个场景可以通过多个视图表现,一个场景包括多个图形项。

  1. QGraphicsScene类 提供绘图场景(scene);场景是不可见的,是一个抽象的管理图形项的容器,可以向场景添加图形项,获取场景中的某个图形项等。
  2. QGraphicsView类 提供绘图的视图(view)组件,用于显示场景中的内容;可以为一个场景设置几个视图,用于对同一个数据集提供不同的视口。
  3. QGraphicsItem类 是场景中所有物件的基类,GraphicsView也提供了一些标准item,例如矩形QGraphicsRectItem,椭圆QGraphicsEllipseItem等。

这三个类的关系:
在这里插入图片描述

注意:

  1. 场景QGraphicsScene 和里面包含的 图形项QGraphicsItem 作为 model, 视图QGraphicsView 作为 view;
  2. model里面存储了要展示的界面的数据定义, 而view根据 model里面的数据进行展示;
  3. 一个model可以对应多个view。

界面的显示关系:
在这里插入图片描述

4、场景QGraphicsScene类

QGraphicsScene是一个图形项的集合,它包括三层:背景层background layer, 项层item layer 和前景层foreground layer。
可以通过重新实现drawBackground() drawForeground() 来控制背景层和前景层。
场景QGraphicsScene主要具有如下一些功能:

  1. 提供管理大量图形项的快速接口;
  2. 将事件传播给每个图形项;
  3. 管理每个图形项的状态,例如选择状态,焦点状态等;
  4. 管理未经变换的渲染功能,主要用于打印。

5、视图QGraphicsView类

QGraphicsView:可以为一个场景设置几个视图,用于对同一个数据集提供不同的视口。当视图比场景大时,会显示场景中的所有内容,当视图比场景小时则只能显示场景的一部分内容,但是会自动提供卷滚条在整个场景内移动。

6、图形项QGraphicsItem类

QGraphicsItem支持以下的一些操作:

  1. 处理鼠标按下、移动、释放、双击、悬停、滚轮和右键菜单事件;
  2. 支持键盘输入,按键事件;
  3. 处理拖曳事件;
  4. 支持组合,可以是父子项关系组合,也可以通过QGraphicsItemCroup类进行组合;
  5. 碰撞检测。

7、Graphics View框架的坐标系统

  1. 视图坐标:与设备坐标相同,是物理坐标,一般以左上角为原点,单位是像素;视图的坐标只与widget或者视口有关,而与场景无关,所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射成场景坐标,以便程序中交互;
  2. 场景坐标:等价于QPainter的逻辑坐标,一般以场景的中心为原点,单位是像素;场景是所有图形项的基础坐标,描述了每个顶层图形项的位置;
  3. 图形项坐标:局部逻辑坐标,一般以图件的中心为原点;每个图形项在场景里都有一个位置坐标,是由QGraphicsItem::scenePos给出的。

8、参考文章

  1. 项目实战4-工控系统前端
  2. QT之图形视图框架概述——Graphics View Framework
  3. 74 QT图形视图框架(Graphics View)
  4. Qt Graphics View 框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习_3 数据操作之线代,微分

线代基础 标量 只有一个元素的张量。可以通过 x torch.tensor(3.0) 方式创建。 向量 由多个标量组成的列表(一维张量)。比如 x torch.arange(4) 就是创建了一个1*4的向量。可以通过下标获取特定元素(x[3]),可以通…

Vue3入门指南:零基础小白也能轻松理解的学习笔记

文章目录 创建项目开发环境项目目录模板语法属性绑定条件渲染列表渲染事件处理内联事件处理器方法事件处理器(常用) 事件参数获取 event 事件事件传参 事件修饰符阻止默认事件阻止事件冒泡 数组变化侦测变更方法替换一个数组 计算属性class 绑定单对象绑…

野火霸天虎 STM32F407 学习笔记_1 stm32介绍;调试方法介绍

STM32入门——基于野火 F407 霸天虎课程学习 前言 博主开始探索嵌入式以来,其实很早就开始玩 stm32 了。但是学了一段时间之后总是感觉还是很没有头绪,不知道在学什么。前前后后分别尝试了江协科技、正点原子、野火霸天虎三次 stm32 的课程学习。江协科…

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

9月20日,以“多模态 多引擎 超融合 新生态”为主题的亚信科技AntDB数据库8.0产品发布会成功举办,从技术和生态两个角度全方位展示了AntDB数据库第8次大型能力升级和生态建设成果。浙江移动、用友、麒麟软件、华录高诚、金云智联等行业伙伴及业界专家共同…

如何做好网页配色,分享一些配色方案和方法

很多网页设计师在选择网页配色方案时,会纠结于用什么网页UI配色方案来吸引客户的注意力,传达信息。选择正确的颜色是网页设计不可或缺的一部分。本指南将从色彩理论和色彩心理学入手,分享三个网页UI配色的简单步骤。 网页UI配色方法有很多&a…

关于msvcp120.dll丢失的解决方法详解,快速解决dll丢失问题

在计算机使用过程中,经常会遇到“msvcp120.dll丢失”的错误提示。这个错误提示通常出现在运行某些程序或游戏时,造成相关应用程序可能无法正常启动或运行。那么,究竟是什么原因导致了msvcp120.dll文件的丢失呢?本文将详细解析msvc…

在 Linux 中更改 echo 的输出颜色

文章目录 前言一、快速入门二、基本使用2.1 对于常规的输出2.2 对于字体加粗的输出2.3 对于字体斜体的输出2.4 对于带下划线的输出2.5 对于闪烁效果的输出 三、小结 前言 在计算机编程世界中,颜色不仅仅是一种视觉效果,它也是一种信息传递的工具。特别是…

Doris:StreamLoad导入数据

目录 1.基本原理 2.支持数据格式 3.StreamLoad语法 3.1.请求参数 3.2.返回参数 4.StreamLoad实践 4.1.使用 curl命令 4.2.使用Java代码 Stream load 是一个同步的导入方式,用户通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中。Stream load 主…

免费记课时小程序-全优学堂

1. 教师使用小程序记上课 使用步骤 创建了员工账号,员工需设置为教师为班级进行排课使用系统账号绑定小程序,记上课 #1.1 创建员工账号 通过系统菜单’机构设置->员工管理‘,添加本机构教师及其他员工。 添加过程中,可设置…

ffmpeg mp3截取命令,视频与mp3合成带音频视频命令

从00:00:03.500开始截取往后长度到结尾的mp3音频(这个更有用,测试好用) ffmpeg -i d:/c.mp3 -ss 00:00:03.500 d:/output.mp3 将两个音频合并成一个音频(测试好用) ffmpeg -i "concat:d:/c.mp3|d:/output.mp3&…

CSS3设计动画样式

CSS3动画包括过渡动画和关键帧动画,它们主要通过改变CSS属性值来模拟实现。我将详细介绍Transform、Transitions和Animations 3大功能模块,其中Transform实现对网页对象的变形操作,Transitions实现CSS属性过渡变化,Animations实现…

Git复制代码

目录 一、常用下载代码 1.登录Git克隆SSH​编辑 2.新建文件然后右键点击Git Bash Here 3.git clone Paste 二. 本地下载 1.从本地进入页面 2.生成代码——>导入——>生成代码后下载 3.解压道相应位置 一、常用下载代码 1.登录Git克隆SSH 2.新建文件然后右键点击…

C# list<T>去重

文章目录 C# list<T>去重值类型去重List<object>object is intobject is decimalobject is charobject is boolobject is string List<int>List<string> 引用类型去重 C# list去重 值类型去重 List object is int //object is intList<object&g…

图像二值化阈值调整——cv2.threshold方法

二值化阈值调整&#xff1a;调整是指在进行图像二值化处理时&#xff0c;调整阈值的过程。阈值决定了将图像中的像素分为黑色和白色的界限&#xff0c;大于阈值的像素被设置为白色&#xff0c;小于等于阈值的像素被设置为黑色。 首先画出灰度直方图&#xff1a;横坐标是灰度值…

制造行业数字化运维破局之道

项目背景 某大型汽车制造集团&#xff0c;致力于通过数字化、智能化运营手段为用户提升提供高品质的汽车产品和服务。IT部门不仅为内外部持续提供服务&#xff0c;同时为业务运营与核心系统运行提供重要支撑。数字化运维作为数字化转型的核心基础&#xff0c;不但要保障数据安…

3D网页游戏外包开发引擎

3D网页开发引擎是用于创建具有三维图形、虚拟现实和交互性的网页应用程序的工具。以下是一些常用的3D网页开发引擎以及它们的主要特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Three.js&…

使用 Curl 和 DomCrawler 下载抖音视频链接并存储到指定文件夹

项目需求 假设我们需要从抖音平台上下载一些特定的视频&#xff0c;以便进行分析、编辑或其他用途。为了实现这个目标&#xff0c;我们需要编写一个爬虫程序来获取抖音视频的链接&#xff0c;并将其保存到本地文件夹中。 目标分析 在开始编写爬虫之前&#xff0c;我们需要了…

Redis Twemproxy 集群,水平扩展 ,扩容方案

文章目录 一、概述二、Twemproxy 分布模式三、测试规划四、Redis 服务实例准备4.1 配置Redis实例4.2 创建关资源4.3 启动Redis服务实例 五、Twemproxy 安装准备六、Twemproxy 安装及集群配置6.1 安装 Twemproxy6.2 配置 Twemproxy6.3 启动 twemproxy6.4 测试 twemproxy 集群 如…

如何使用 NFTScan NFT API 在 Polygon 网络上开发 Web3 应用

Polygon 以前被称为 Matic Network&#xff0c;是一种扩展的解决方案&#xff0c;它提供多种工具来加快并降低区块链网络上交易的成本和复杂性。然而&#xff0c;其区块链上的大量活动使以太坊因增长的传输成本和拥挤的流量几乎瘫痪。Polygon 诞生的主要目的是帮助以太坊解决链…

Docker学习——①

文章目录 1、什么是虚拟化、容器化&#xff1f;2、为什么要虚拟化、容器化&#xff1f;3、虚拟化实现方式3.1 应用程序执行环境分层3.2 虚拟化常见类别3.3 常见虚拟化实现3.3.1 主机虚拟化(虚拟机)实现3.3.2 容器虚拟化实现3.3.3 空间隔离实战--基础知识3.3.4 PID 隔离3.3.5 Mo…