【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.rhkb.cn/news/179200.html

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

相关文章

利用GEE对季节性地物进行分类的代码实现

采样点的选取 如果你采用监督学习的话,那就手动打标签 或者可以了解一下非监督学习 合成多季节多波段影像 首先,制作一个包含多波段的影像,每个波段作为随机森林分类器的一个feature输入,提升feature的丰富度以保证分类精度。…

MySQL用户管理和授权

目录 一.用户管理 1.1.新建用户 1.2.查看用户 1.3.重命名用户rename 1.4.删除用户 1.5.修改当前登录用户密码 1.6.修改其他用户密码 1.7.忘记root 密码并找回 二.数据库用户授权 2.1.all privilege包含的权限 2.2.授予权限 ①允许指定用户查询指定数据库表 ②允许…

FlexmonsterPivotTable-2.9.63 LICENSE

FlexmonsterPivotTable-v2.9.63用于网络报告的数据透视表组件,用于可视化业务数据的最强大的 JavaScript 工具 与任何技术堆栈集成 该组件可与任何技术堆栈无缝协作: 与Angular、React、jQuery、Vue等 完美集成 没有服务器端依赖项 只需几行代码 即可开始…

Python接口自动化测试实战,一篇足矣

接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中,我们…

社区论坛在线交流网站系统源码+SEO优化 带前后端完整搭建教程

大家好,今天罗峰来给大家分享一款社区论坛在线交流网站系统源码。社区论坛在线交流在当下时时代还是很火的。现在人们对于在线交流和互动的需求不断增加。社区论坛作为一种传统的在线交流方式,仍然有着广泛的市场需求和用户群体。然而,现有的…

MySQL - Zero date value prohibited

问题: timestamp字段报Caused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited 原因: timestamp字段存入了0值, 超出了最小值1900-01-01 00:00:00, 转Java对象的时候报错 解决: 1.修复或删除原数据 2. mysqlurl 中添加zeroDateTimeBehaviorconve…

【Linux】 shutdown 命令使用

shutdown 命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。使用权限:系统管理者。 语法 shutdown [选项] 时间 [警告信息] 命令选项及作用 执行令 man shutdown 执行命令结果 参…

替代知网!中国科学院发布公益学术平台,可免费获取8000万篇论文专著!

可检索1.7亿篇科技文献的 公益平台来了! 11月1日由中国科学院等单位联合建设的 PubScholar公益学术平台 正式对社会公众开放 该平台首期整合集成了 中国科学院的科技成果资源 科技出版资源和学术交流资源 内容包含期刊论文、学位论文 预发布论文、专利文献、…

时间复杂度的计算技巧-算法模型中的时间复杂度如何计算,有哪些技巧呢

大家好,我是微学AI,今天给大家介绍一下时间复杂度的计算技巧-算法模型中的时间复杂度如何计算,有哪些技巧呢,算法的时间复杂度是评估算法性能和效率的一种方式,它表示算法需要执行多少次基本操作才能完成其任务&#x…

LuaHttp库写的一个简单的爬虫

LuaHttp库是一个基于Lua语言的HTTP客户端库,可以用于爬取网站数据。与Python的Scrapy框架类似,LuaHttp库也可以实现网站数据的抓取,并且可以将抓取到的数据保存到数据库中。不过需要注意的是,LuaHttp库并不像Scrapy框架那样具有完…

【C++ 系列文章 -- 程序员考试 201811 下午场 C++ 专题 】

1.1 C 题目六 阅读下列说明和C代码,填写程序中的空(1) ~(5),将解答写入答题纸的对应栏内。 【说明】 以下C代码实现一个简单乐器系统,音乐类(Music)可以使用…

VMware——VMware17设置WindowServer2012R2环境静态IP及关闭防火墙

目录 一、VMware17设置WindowServer2012R2环境静态IP1.1、工具栏虚拟机的设置步骤1.2、工具栏编辑的设置步骤1.3、静态IP的设置步骤 二、VMware17关闭WindowServer2012R2环境防火墙 一、VMware17设置WindowServer2012R2环境静态IP 1.1、工具栏虚拟机的设置步骤 打开VMware虚拟…

【工具】【IDE】Qt Creator社区版

Qt Creator社区版下载地址:https://download.qt.io/archive/qt/ 参考:https://cloud.tencent.com/developer/article/2084698?areaSource102001.8&traceIduMchNghqp8gWPdFHvSOGg MAC安装并配置Qt(超级简单版) 1.安装brew&…

el-table 列分页

<template><div><el-table:data"tableData":key"tampTime"style"width: 100%"><el-table-columnprop"name"label"姓名"width"180"></el-table-column><el-table-columnprop&quo…

上传LaTeX版本的NeurIPS文章到arXiv总是Failed的解决方案

往arXiv上传NeurIPS模版文章时&#xff0c;一直出现两处报错&#xff0c;一处是下图中的图片错误&#xff1a; 但是&#xff0c;我怀疑是不是图片并排放置的minipage不可用&#xff0c;于是改成了正常的图片形式来测试&#xff1a; 仍然是相同的错误&#xff0c;于是我又尝试去…

人工智能基础_机器学习014_BGD批量梯度下降公式更新_进一步推导_SGD随机梯度下降和MBGD小批量梯度下降公式进一步推导---人工智能工作笔记0054

然后我们先来看BGD批量梯度下降,可以看到这里,其实这个公式来源于 梯度下降的公式对吧,其实就是对原始梯度下降公式求偏导以后的梯度下降公式,然后 使用所有样本进行梯度下降得来的,可以看到* 1/n 其实就是求了一个平均数对吧.所有样本的平均数. 然后我们看,我们这里* 1/n那么…

从 Java 到 Rust,Substrate 优秀学员亲述 Web3 入门之路

你知道如何从 0 到 1 转行 Web3&#xff0c;找到技术开发岗位的一席之地吗&#xff1f;从后端核心开发到 Web3 测试&#xff0c;Substrate 课程优秀学员的区块链探索之路有哪些心得体会&#xff1f;10 月 26 日晚 20:00&#xff0c;第二期 Block Space 成长路径系列主题 AMA 活…

美团面试:Redis 除了缓存还能做什么?可以做消息队列吗?

这是一道面试中常见的 Redis 基础面试题,主要考察求职者对于 Redis 应用场景的了解。 即使不准备面试也建议看看,实际开发中也能够用到。 内容概览: Redis 除了做缓存,还能做什么? 分布式锁:通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下,我们都是基于 Re…

基于CMFB余弦调制滤波器组的频谱响应matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、CMFB余弦调制滤波器组原理 4.2、CMFB调制过程 4.3、CMFB特点 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................…

【触想智能】4U触摸工控机具有哪些优势?

工控机也叫工控主机&#xff0c;和我们常见的普通电脑主机是一样的&#xff0c;都是由CPU、主板、内存、硬盘、电源以及机箱组成的。 工控机有很多分类&#xff0c;有无风扇工控机、嵌入式工控机、上架式工控机、4U触摸工控机等。上架式工控机在市场上是比较受欢迎的&#xff0…