QT Graphics View 绘图架构之场景、视图与图形项简介

news2024/11/27 8:42:49

1、场景、视图与图形项

采用QPainter 绘图时需要在绘图设备的 paintEvent()事件里编写绘图的程序,实现整个绘图过程。这种方法如同使用 Windows 的画图软件在绘图,绘制的图形是位图,这种方法适合于绘制复杂性不高的固定图形,不能实现图件的选择、编辑、拖放、修改等功能。

Qt 为绘制复杂的可交互图形提供了 Graphics View 绘图架构,是一种基于图形项(GraphicsItem)的模型/视图模式,与数据编辑与显示的 Model/View 模式类似。使用Graphics View架构可以绘制复杂的有几万个基本图形元件的图形,并且每个图形元件是可选择、可拖放和修改的,类似于矢量绘图软件的绘图功能。

Graphics View 架构主要由3 个部分组成,即场景、视图和图形项,其构成的 Graphics View绘图系统结构如下图所示。

1)、场景

QGraphicsScene 类提供绘图场景 (Scene)。场景是不可见的,是一个抽象的管理图形项的容器,可以向场景添加图形项,获取场景中的某个图形项等。场景主要具有如下一些功能:

(1)提供管理大量图形项的快速接口:

(2)将事件传播给每个图形项;

(3)管理每个图形项的状态,例如选择状态、焦点状态等;

(4)管理未经变换的渲染功能,主要用于打印。

除了图形项之外,场景还有背景层和前景层,通常由 QBrush 指定,也可以通过重新实现drawBackground()和 drawForeground()函数来实现自定义的背景和前景,实现一些特殊效果

2)、视图

QGraphicsView 提供绘图的视图 (View)组件,用于显示场景中的内容。可以为一个场景设置几个视图,用于对同一个数据集提供不同的视口。

在上图中,虚线框的部分是一个场景,视图1比场景大,显示场景的全部内容。缺省情况下,当视图大于场景时,场景在视图的中间部分显示,也可以设置视图的 Alignment 属性控制场景在视图中的显示位置:当视图小于场景时 (见上图中的视图 2),视图只能显示场景的一部分内容,但是会自动提供卷滚条在整个场景内移动。

视图接收键盘和鼠标输入并转换为场景事件,并进行坐标转换后传送给可视场景。

3)、图形项

图形项(Graphics Item)就是一些基本的图形元件,图形项的基类是 QGraphicsItem。Ot 提供了一些基本的图形项,如绘制椭圆的 QGraphicsEllipseltem、绘制矩形的 QGraphicsRectItem、绘制文字的QGraphicsTextItem 等

QGraphicsItem 支持如下的一些操作:

(1)支持鼠标事件响应,包括鼠标按下、移动、释放、双击,还包括鼠标停留、滚轮、快捷菜 单等事件;

(2)支持键盘输入,按键事件;

(3)支持拖放操作;

(4)支持组合,可以是父子项关系组合,也可以是通过 QGraphicsItemGroup 类进行组合。

所以,图形项可以被选择、拖放、组合,若编写信号槽函数代码,还可以实现各种编辑功能。一个图形项还可以包含子图形项,图形项还支持碰撞检测,即是否与其他图形项碰撞。

在上图所示的视图、场景和图形项之间的关系示意图中,场景是图形项的容器,可以在场景上绘制很多图形项,每个图形项就是一个对象,这些图形项可以被选择、拖动等。视图是显示场景的一部分区域的视口,一个场景可以有多个视图,一个视图显示场景的部分区域或全部区域,或从不同角度观察场景。

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

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

相关文章

供应商竞争情报分析工具 —— 全国招投标查询API

引言 招投标是一项非常重要的商业活动,涉及政府采购、建筑工程、物资采购等众多领域。招投标活动的开展需要广泛的信息支持,包括招标公告、中标结果、项目动态等各种信息。然而,由于信息分散、更新速度慢等原因,用户往往难以及时…

实景区剧本杀系统开发

实景区剧本杀系统开发需要考虑以下几个方面: 场地选取:选择合适的场地,足够容纳游戏人数和游戏内容,同时需要考虑安全性和便利性。 剧情设定:根据场地和游戏类型设计剧情,包括人物角色、任务目标、…

优思学院|精益管理的理念是什么?

作为一个企业,我们都希望拥有高效率和优异的竞争力。但是,如何才能在竞争激烈的市场中脱颖而出?这时,精益管理理念的出现可以帮助我们。 精益管理的基本概念是什么? 精益管理的核心理念是通过消除浪费来实现生产效率…

【WCH】CH32F203基于内部RTC时钟+I2C SSD1306 OLED显示

【WCH】CH32F203基于内部RTC时钟SSD1306 OLED显示 📌相关篇《STM32F103基于标准库I2C SSD1306仿数码管RTC时钟显示》 ✨CH32F203的内部时钟频率:40KHz 🔖基于Keil开发环境 📜基于SDK中的RTC示例修改为内部时钟源,串…

详解C语言string.h中常用的14个库函数(三)

本篇博客继续讲解C语言string.h头文件中的库函数。本篇博客计划讲解3个函数,分别是:strstr, strtok, strerror。其中strstr函数我会用一种最简单的方式模拟实现。 strstr char * strstr ( const char * str1, const char * str2 );strstr可以在str1中查…

电脑怎么远程控制另一台电脑

要从一台电脑远程控制另一台电脑,您可以使用远程桌面软件。 以下是远程控制另一台电脑的步骤: 一、在两台电脑上安装远程桌面软件 有多种远程桌面软件可用,例如 Splashtop、微软远程桌面。 在远程电脑和本地电脑上分别安装软件。访问各自软…

MQ集群(rabbitMQ)

普通集群: 创建过程 我们先在之前启动的mq容器中获取一个cookie值,作为集群的cookie。执行下面的命令: docker exec -it mq cat /var/lib/rabbitmq/.erlang.cookie 可以看到cookie值如下: EFLYOBKNYFETSAXOUEYI 接下来,停止…

中级软件设计师备考---操作系统和计算机网络

【因为我自己是软件工程专业毕业的学生,所以408里的这两门课都比较熟悉,因此这一部分只放一些我印象不是完全深刻的知识。】 目录 操作系统前驱图与PV操作死锁的预防与避免绝对路径和相对路径缺页中断的某种练习题 计算机网络网络规划与设计特殊含义的I…

Jenkins Kubernetes

Kubernetes集成Harbor Harbor 私服配置 在Kubernetes的master和所有worker节点上加上harbor配置,修改daemon.json,支持Docker仓库,并重启Docker。 sudo vim /etc/docker/daemon.json {"registry-mirrors": ["https://jrabv…

Talk预告 | 北京大学刘博UCL冯熙栋-TorchOpt,一个高效的可微优化库

本期为TechBeat人工智能社区第490期线上Talk! 北京时间4月13日(周四)20:00,北京大学智能科学与技术研究助理—刘博和伦敦大学学院 (UCL) 计算机博士生—冯熙栋的Talk将准时在TechBeat人工智能社区开播! 他们与大家分…

【具体到每一步】从0制作一个uniapp的新闻类页面(界面篇)

目录 项目初始化 / 基础配置 项目创建 配置路由/页面/tabbar pages.json配置tabbar 配置图标/静态资源 导航栏和字体颜色 scroll-view实现横向滚动条样式 公共模块定义components组件 新建组件 使用组件 组件里的结构 布局个人中心页面 组件差异化处理 数据传递 导航…

【角色用例图讲解】

角色用例图讲解 一、 用例图的定义及组成要素二、参与者与用例的4种关系三、 常用的用例图软件 我是将军我一直都在,。! 一、 用例图的定义及组成要素 用例图是编写需求说明时经常用到的需求表达方式,用于向开发、测试同事说明需求中用户与系…

【机智云物联网低功耗转接板】+模拟无线远程控制仪表启停

GE211 是机智云自研的定制化的物联网转接板,使用 ESP32-C3-WROOM-02 通讯模块,适用于白色智能家电等设备应用。硬件设计上采用支持 WiFi 和 BLE 的双模无线通信模块,具备TTL电平转换串口,免开发快速接入,提高开发效率。…

SpringBoot 使用 Sa-Token 完成权限认证

一、设计思路 所谓权限认证,核心逻辑就是判断一个账号是否拥有指定权限: 有,就让你通过。没有?那么禁止访问! 深入到底层数据中,就是每个账号都会拥有一个权限码集合,框架来校验这个集合中是…

Linux 常用命令2

文件内容查看 Linux系统中使用以下命令来查看文件的内容: cat 由第一行开始显示文件内容tac 从最后一行开始显示nl 显示的时候,顺道输出行号more 一页一页的显示文件内容less与more 类似,但可以往前翻页head 只看头几行tail 只看尾巴几行 j…

【ZooKeeper to KRaft Migration】kafka 3.4版本zookeeper数据迁移到kraft

引言 kafka在3.X版本后内置了kraft用来替代zookeeper管理集群,但是在升级的过程中发现,许多升级的文档都是只有新部署安装kraft版本,而没有涉及到数据迁移相关的资料,这样如果直接变更的话,会导致kakfa中的数据全部丢…

升级gpt4-GPT最新版本怎么下载使用

怎么 让gpt-3的模型升级gpt4 GPT-4是OpenAI的未来版本,目前还未发布。因此,我们无法准确指导如何将GPT-3升级到GPT-4。要升级GPT-3,需要进行大量的研究和开发工作。如果OpenAI发行了GPT-4的预览版,那么可能需要花费大量的时间和资…

Redission实现分布式锁lock()和tryLock()方法的区别

lock.lock(30, TimeUnit.SECONDS); // 尝试获取锁30秒,如果获取不到则放弃 //尝试获取锁,等待5秒,持有锁10秒钟 boolean success lock.tryLock(0, 10, TimeUnit.SECONDS); Redisson 是一种基于 Redis 的分布式锁框架,提供了 lo…

国产蓝牙芯片OM6621P/HS6621系列门锁方案

在5G、物联网以及互联网家装市场的快速发展等多重因素的作用下,中国智能家居市场展现蓬勃发展态势。作为智能家居“入口”产品以及家庭智能安防产品的核心单品,智能门锁以其区别于传统机械锁更具安全性、便利性、可扩展性的优势,逐渐成为智能…

Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示

场景 GeoTools GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。 GeoTools 提供了 OGC (Open Geospatial Consortium) 规范的一个实现来作为他们的开发。 官网地址: GeoTools The Open Source Java GIS Toolkit — GeoTools 参考…