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

news2024/11/26 21:34:51

【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.coloradmin.cn/o/1167091.html

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

相关文章

解析电源模块功能测试项目 电源模块测试系统助力功能测试

电源测试一般包括保护特性测试、安规测试、电磁兼容测试、可靠性测试、功能测试以及其它一些特定测试。电源功能测试是评估电源质量好坏、性能、响应等的重要测试方法,也是电源的常规测试内容。 电源功能测试项目 电源功能测试是确保电源稳定性和可靠性的重要测试指…

使用android studio开发flutter应用,10分钟环境配置

1.安装flutter sdk 安装中文官网配置环境即可:安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 然后如果你的网络不好的话,可以修改flutter的源地址,将下面的变量创建成新的环境变量 FLUTTER_STORAGE_BASE_URLhttp…

接口测试框架中的鉴权处理!

接口自动化测试中通常都有鉴权机制,就是判断是否在登录状态下,已登录方可调用接口,未登录则不可调用。本文将带领大家学习使用rest-assured框架实现基于cookies和token的鉴权关联,实现接口自动化测试。 1、基于cookies的鉴权关联…

创建自定义美颜滤镜:使用第三方美颜SDK的步骤指南

美颜滤镜在现代移动应用和直播平台中变得越来越受欢迎。它们可以让用户在自拍照片、视频聊天或实时直播中看起来更加美丽和自信。如果您是一位应用开发者,想要增加美颜滤镜功能,但又不想从头开始构建整个系统,那么使用第三方美颜SDK可能是一个…

【C++ 学习 ㉚】- 超详解 C++11 的右值引用

目录 一、左值和右值 二、左值引用和右值引用 三、移动语义 3.1 - 左值引用的短板 3.2 - 移动构造和移动赋值 四、move 函数 4.1 - remove_reference 的实现 4.2 - move 的实现 五、完美转发 5.1 - forward 的实现 5.2 - 使用场景 很多初学者都感觉右值引用晦涩难懂…

宽以光电厚以激光 组合式测宽测厚仪 性价比更高

对于板材类产品而言,对其几何尺寸的品质检测,往往是宽度与厚度兼具的,为了同时满足两种检测需求,制造了组合式测宽测厚仪。 单独的测宽仪的原理有光电、机器视觉、激光等,光电测宽仪不仅可选择的测量原理多&#xff0c…

若依分离版——配置多数据源(mysql和oracle),实现一个方法操作多个数据源

目录 一、若依平台配置 二、编写oracle数据库访问的各类文件 三. 一个方法操作多个数据源 一、若依平台配置 1、在ruoyi-admin的pom.xml添加依赖 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version…

tensorflow-gpu 找不到指定模块

排除&#xff1a; 1.python编译器是64位 查询教程 2. cuda cudnn版本 均是12.2 可以向下兼容 cmd&#xff1a; nvcc -V即可 另一种方法 tensorflow官网教程 pip install tensorflow_gpu1.12.0 4.安装torch-gpu 检查所在环境 解决&#xff01;&#xff01; conda install …

瑞禧生物分享~今天是 碲化银粉体 Ag2Te CAS:12002-99-2

碲化银粉体 Ag2Te CAS&#xff1a;12002-99-2 纯度&#xff1a;99% 仅用于科研 储藏条件&#xff1a;冷藏-20℃ 简介&#xff1a;碲化银是一种无机化合物&#xff0c;化学式是Ag2Te。它是一种单斜晶体&#xff0c;并以矿物的形式存在于自然界中。化学计量的碲化银具有n型半导…

生成第一个 Blazor 应用

前言&#xff1a;博主文章仅用于学习、研究和交流目的&#xff0c;不足和错误之处在所难免&#xff0c;希望大家能够批评指出&#xff0c;博主核实后马上更改。 概述&#xff1a;Blazor 是一个使用 Blazor 生成交互式客户端 Web UI 的框架使用 C# 创建丰富的交互式 UI。共享使…

rabbitmq的confirm模式获取correlationData为null解决办法

回调函数confirm中的correlationDatanull // 实现confirm回调,发送到和没发送到exchange,都触发 Override public void confirm(CorrelationData correlationData, boolean ack, String cause) {// 参数说明:// correlationData: 相关数据,可以在发送消息时,进行设置该参数// …

重大喜讯 | UMS攸信技术斩获厦门5G应用大赛三等奖!

近日&#xff0c;第三届厦门5G应用大赛获奖项目名单公示&#xff0c;攸信技术的“AI5G柔性生产缺陷检测示范线”项目脱颖而出&#xff0c;荣获「第三届厦门5G应用大赛三等奖」&#xff01; 第三届厦门5G应用大赛获奖项目名单 本次获奖既是对攸信技术5G技术创新的鼓励&#xff0…

Ribbon负载均衡原理

一、先看下流程图 备注&#xff1a;红色后面都为拦截器的逻辑&#xff0c;主要是加载配置文件【LoadBalancerAutoConfiguration】&#xff0c;对发送http请求的RestTemplate进行包装拦截&#xff0c;逻辑拦在拦截器里面。 二、LoadBalancerAutoConfiguration 负载均衡用到配置…

Spring集成高性能队列Disruptor

Disruptor简介 Disruptor&#xff08;中文翻译为“破坏者”或“颠覆者”&#xff09;是一种高性能、低延迟的并发编程框架&#xff0c;最初由LMAX Exchange开发。它的主要目标是解决在金融交易系统等需要高吞吐量和低延迟的应用中的并发问题。 Disruptor特点 无锁并发&#x…

kibana中文设置

安装目录下&#xff1a; 修改config/kibana.yml文件&#xff0c;添加如下配置 i18n.locale: "zh-CN"如图&#xff1a; 保存后&#xff0c;重启kibana即可

分组select获取每组用户最新时间的那条数据的查询方式

分组select获取每组用户最新时间的那条数据的查询方式,使用子查询内连接的方式实现 selecttp.user_id AS userId,tp.operator,DATE_FORMAT(tp.create_time,%Y-%m-%d %H:%i:%s) AS operateTimefrom 表名 t1 INNER JOIN(select user_id, max(create_time) max_time from 表名whe…

LeakCanary - Android的内存泄漏检测库

官网 GitHub - square/leakcanary: A memory leak detection library for Android. LeakCanary 项目简介 LeakCanary’s knowledge of the internals of the Android Framework gives it a unique ability to narrow down the cause of each leak, helping developers drama…

知识付费系统小程序开发中的最新趋势和技术是什么?

在迅速发展的移动应用市场中&#xff0c;知识付费系统小程序成为了在线学习和知识传递的重要形式。随着技术的不断进步&#xff0c;了解最新的趋势和技术对于开发知识付费系统小程序至关重要。本文将讨论当前在这一领域中备受关注的最新趋势和技术。 1. 跨平台开发框架的崛起…

赢在电商设计!2024年最新电商设计实战技巧盘点

双十一、双十二、黑五的电商大促即将轮番将至&#xff0c;电商运营人迎来大忙季&#xff0c;选品、直播、采购入库、售后……各种环节都是影响电商转化的关键因素&#xff0c;而电商设计作为打通这些环节&#xff0c;打造高转化率电商平台的关键要素&#xff0c;能够吸引用户注…

淘宝(PC端和APP端)商品详情API接口,可批量采集,高并发请求

淘宝&#xff08;PC端和APP端&#xff09;商品详情API接口&#xff0c;可批量采集&#xff0c;高并发请求代码如下&#xff1a; 淘宝商品详情API接口可以获取到商品的详细信息&#xff0c;以下是一个示例&#xff1a; 请求方式&#xff1a;使用HTTP或HTTPS协议&#xff0c;向指…