图形视图框架QGraphicsScene(场景,概念)
QGraphicsScene
该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用,用于在 2D 表面上可视化图形项目,例如线条、矩形、文本甚至自定义项目。
QGraphicsScene具有的功能:
- 提供用管理大量数据项的高速接口
- 传播事件到每一个图形项
- 管理图形项的状态,比如选择和处理焦点
- 提供无变换的渲染功能,主要用于打印
QGraphicsScene的函数(方法):
添加项目:
| addElllipse() | 创建一个椭圆项添加到项目中 返回QGraphicsEllipseItem* |
| addItem() | 添加项目,使用QGraphicsItem*添加 |
| addLine() | 创建一个线段项添加到项目中 返回QGraphicsLineItem* |
| addPath() | 创建一个路径项添加到项目中 返回QGraphicsPathItem* |
| addPixmap() | 创建一个图片项添加到项目中 返回QGraphicsPixmapItem* |
| addPolygon() | 创建一个多边形项添加到项目中 返回QGraphicsPolygonItem* |
| addRect() | 创建一个矩形项添加到项目中 返回QGraphicsRectItem* |
| addText() | 创建一个文本项添加到项目中 返回QGraphicsTextItem* |
| addSimpleText() | 创建一个图片项添加到项目中 返回QGraphicsSimpleTextItem* |
| addWidget() | 创建一个控件添加到项目中 返回QGraphicsProxyWidgetItem* |
addItem()等之后介绍QGriphicsItem时再介绍
可以直接使用除addItem()的函数来创建指定形状的项目。
#include <QApplication>
#include<QGraphicsScene>
#include<QGraphicsView>
#include<QGraphicsItem>
#include<QPushButton>
int main(int argc, char *argv[])
{QApplication a(argc, argv);QGraphicsScene scene;//创建一个场景scene.setSceneRect(-200,-200,400,400);//设置矩形场景大小//绘制圆形QGraphicsItem* item=scene.addEllipse(QRectF(50,50,50,50),QPen(QColor(Qt::red)),QColor(Qt::lightGray));//绘制文字QGraphicsItem* item2=scene.addText("Text",QFont("宋体",12));//绘制线段QGraphicsItem* item3=scene.addLine(QLineF(0,50,100,100),QPen(QColor(Qt::blue)));//添加控件QPushButton *push1=new QPushButton("按键");scene.addWidget(push1);//添加控件QGraphicsView view;//视图,下一节会仔细介绍view.setScene(&scene);//设置场景view.resize(600,600);//设置视图大小view.show();//显示return a.exec();
}

获取项目:
| itemAt() | 返回指定位置处最顶层的可见项,或者如果此位置没有项返回nullptr |
| items() | 返回场景中所有项的有序列表 |
| itemsBoundingRect() | 计算并返回场景中所有项的边界矩形 |
这里主要介绍一下items(),该函数有多个重载:
QList<QGraphicsItem*>QGraphicsScene::items(Qt:SortOrder)//可以设置堆叠顺序:
- Qt::AscendingOrder 项目按升序排序
- Qt::DescendingOrder 降序
QList<QGraphicsItem*>QGraphicsScene::items(const QPointF,Qt::ItemSelectionModel,Qt::SortOrder,const QTransFrom)
- 第一个参数为:点位
- 第二个参数为:指定如何选择项目
- 第三次参数为:排序
- 第四个参数为:坐标变换
其中第一个参数还可以为:QRectF,QPolygonF,QPainterPath
Qt::ItemSelectionModel
| Qt::ContainsItemShape | 输出列表仅包含其形状完全包含在选择区域中的项。不包括与区域轮廓相交的项目。 |
| Qt::IntersectsItemShape | 输出列表既包含其形状完全包含在选择区域内的项目,也包含与区域轮廓相交的项目。这是橡皮筋选择的常见模式。 |
| Qt::ContainsItemBoundingRect | 输出列表仅包含其边框完全包含在选择区域内的项目。不包括与区域轮廓相交的项目。 |
| Qt::IntersectsItemBoundingRect | 输出列表既包含其边框矩形完全包含在选择区域内的项目,也包含与区域轮廓相交的项目。此方法通常用于确定需要重绘的区域。 |
焦点、活动:
| activePanel() setActivePanel() | 返回当前活动面板,返回的数据类型为:QGraphicsItem* 激活指定窗口 |
| activeWindow() setActiveWindow() | 返回当前活动窗口,返回的数据类型为:QGraphicsWidget* 激活指定窗口 |
| isActive() | 是否是活跃的 |
| bspTreeDepth() setBspTreeDepth() | 场景的BSP索引树的深度,深度直接影响场景的性能和内存使用率;后者随着树的深度呈指数增长 |
| clearFous() | 清空焦点 |
| focusItem() setFocusItem() | 焦点上的项目 |
| focusOnTouch setFocusOnTouch(bool) | 保存项目在接收触摸开始事件时是否获得焦点(Qt 5.12) |
| hasFocus() | 场景是否拥有焦点 |
| setFocus() | 设置焦点,已具有焦点,则此函数不执行任何操作 |
| removeItem() | 移除项目 |
| selectedItems() | 返回所有当前选定项的列表。这些项目不按特定顺序返回 |
| selectionArea() setSelectionArea() | 选择区域 |
| stickyFocus() setstickyFocus() | 单击场景背景是否会清除焦点 |
| update(QRectF) | 更新数据 |
| views() | 获取所有视图的列表 |
字体、背景和基本属性:
| backgroundBrush() setBackgroundBrush() | 背景笔刷 |
| font() setFont() | 字体 |
| style() setStyle() | 场景样式 |
| foregroundBrush() SetForeGroundBrush() | 场景的前景画笔 |
| palette() setPalette() | 调色板 |
| sceneRect() setSceneRect() | 场景矩形 |
| height() 相当于 sceneRect().height() widget()相当于 sceneRect().widge() | 场景高度和宽度 |
| minimunRenderSize() SetMinimunRenderSize() | 最小渲染大小,(Qt 5.4) 默认值为 0。如果未设置,或者设置为 0 或负值,将始终呈现所有项目。 |
| reader() | 使用绘制器将源矩形从场景渲染到目标。此功能可用于将场景内容捕获到绘画设备(例如,截图)或使用 QPrinter 进行打印 |
QGraphicsScene scene;//创建一个场景//设置矩形场景大小scene.setSceneRect(-200,-200,400,400);//设置字体scene.setFont(QFont("Times", 10, QFont::Bold));//设置背景scene.setBackgroundBrush(QColor(255,255,0,100));//设置前场笔刷scene.setForegroundBrush(QBrush(QColor(20,20,20,20)));//设置调色板scene.setPalette(QPalette(QPalette::Shadow));
其他:
| collidingItems() | 返回与项冲突的所有项的列表,一般用于碰撞 |
| contextMenuEvent() | 对于事件上下文菜单事件,此事件处理程序可以在子类中重新实现以接收上下文菜单事件。 |
| destroyItemGrop() | 将组中的所有项目重定父级到组的父项,然后从场景中删除组,最后将其删除。项目的位置和转换将从组映射到组的父级 |
| mouseGrabberItem() | 返回当前鼠标抓取器项,或者如果当前没有项正在抓取鼠标返回true |
| setItemIndexMethod() | 设置场景的索引算法 |
| invalidate() | 使场景中的矩形图层重新绘制无效并计划重绘。图层中的任何缓存内容都将无条件失效并重新绘制。 |
ItemIndexMethod:
| QGraphicsScene::BspTreeIndex | 应用二进制空间分区树,场景所有项目位置算法都是接近对数复杂度的量级,通过使用二进制搜索。添加、移动和删除项目是对数的。此方法最适合静态场景(即大多数项目不移动的场景)。 |
| QGraphicsScene::NoIndex | 不应用任何索引项目位置具有线性复杂性,因为将搜索场景中的所有项目。但是,添加、移动和删除项目是在恒定的时间内完成的。此方法非常适合连续添加、移动或删除许多项目的动态场景。 |
SceneLayer(项目的渲染层)
| QGraphicsScene::ItemLayer | 项目图层,通过调用虚拟函数 drawItems() 来渲染此层中的所有项目。项目图层在背景图层之后绘制,但在前景图层之前绘制。 |
| QGraphicsScene::BackgroundLayer | 背景图层,通过调用虚拟函数 drawBackground() 在此层中渲染场景的背景。首先绘制所有图层的背景图层。 |
| QGraphicsScene::ForegroundLayer | 前景图层,通过调用虚拟函数 drowForeground() 在此层中渲染场景的前景。前景图层是所有图层的最后一个绘制的。 |
| QGraphicsScene::AllLayers | 所有层;此值表示所有三个图层的组合。 |
公共插槽:
| advance() | 将场景进一步推进,这分两个阶段完成:在第一阶段,通知所有项目场景即将更改,在第二阶段,所有项目都会收到它们可以移动的通知。用于动画 |
| clear() | 从场景中移除和删除所有项目,但保持场景状态不变 |
| clearSelection() | 清除当前所选内容 |
| invalidate() | 使场景中的矩形图层重新绘制无效并计划重绘。图层中的任何缓存内容都将无条件失效并重新绘制。 |
| update(QRectF) | 计划在场景中重绘区域直角 |
信号:
| changed() | 如果场景内容发生更改时,触发信号 |
| foucusItemChanged() | 焦点发生变化时,触发信号 |
| sceneRectChanged() | 景矩形发生变化时,触出信号 |
| selectionChanged() | 每当选择更改时,触发信号 |
QGraphicsScene的使用方法:
- QGraphicsScene 没有自己的视觉外观;它仅管理项目,需要创建一个QGraphicsView来显示可视化场景
- QGraphicsScene最大的优势之一是它能够有效地确定物品的位置。即使场景中有数百万个项目,items() 函数也可以在几毫秒内确定项目的位置。
这里就不具体介绍使用方法,使用方法会在QGraphicsView和QGraphicsItem中主要介绍。
参考资料:
QGraphicsScene Class | Qt Widgets 5.15.13
相关文章:
图形视图框架QGraphicsScene(场景,概念)
QGraphicsScene 该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用,用于在 2D 表面上可视化图形项目,例如线条、矩形、文本甚至自定义项目。 QGraphicsScene具有的功能: 提供用管理大量数据项的高速接口传播事件到每一个图形项…...
ChatGPT 拓展资料: 强化学习-SARSA算法
强化学习是一种机器学习技术,它关注的是在特定环境中,如何最大化一个智能体(agent)的累积奖励(reward)。强化学习算法会根据当前状态和环境的反馈来选择下一个动作,不断地进行试错,从而优化智能体的行为。 SARSA是一种基于强化学习的算法,它可以用于解决马尔可夫决策…...
SpringJDBC异常抽象
前言spring会将所有的常见数据库的操作异常抽象转换成他自己的异常,这些异常的基类是DataAccessException。DataAccessException是RuntimeException的子类(运行时异常),是一个无须检测的异常,不要求代码去处理这类异常SQLErrorCodeSQLExcepti…...
我在字节的这两年
前言 作为脉脉和前端技术社区的活跃分子,我比较幸运的有了诸多面试机会并最终一路升级打怪如愿来到了这里。正式入职时间为2021年1月4日,也就是元旦后的第一个工作日。对于这一天,我印象深刻。踩着2020年的尾巴接到offer,属实是过了一个快乐…...
Button(按钮)与ImageButton(图像按钮)
今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节只对Button进行讲解,另外Button是TextView的子类,所以TextView上很多属性也可以应用到B…...
Chrome插件开发-右键菜单开启页面编辑
开发一个执行js脚本改变页面DOM的Chrome插件,manifest_version版本为3。 Chrome插件基本知识 Chrome插件通常由以下几部分组成: manifest.json 该文件为必须项,其它文件都是可选的。该文件相当于插件的meta信息,包含manifest版…...
指针进阶(上)
内容小复习🐱: 字符指针:存放字符的数组 char arr1[10]; 整型数组:存放整型的数组 int arr2[5]; 指针数组:存放的是指针的数组 存放字符指针的数组(字符指针数组) char* arr3[5]; 存放整型指针的数组(整型指针数组) int* arr[6]; 下面进入学习了哦~&…...
Python每日一练(20230318)
目录 1. 排序链表 ★★ 2. 最长连续序列 ★★ 3. 扰乱字符串 ★★★ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 排序链表 给你链表的头结点 head ,请将其按 升序 …...
多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码
目录 摘要: 卷积神经网络(CNN)的介绍: 长短期记忆网络(LSTM)的介绍: CNN-LSTM: Matlab代码运行结果: 本文Matlab代码数据分享: 摘要: 本文使用CNN-LSTM混合神经网…...
mybatis中获取参数的两种方式:${}和#{}
目录 1.#{} 2.${} 3.总结 1.#{} 本质是占位符赋值 示例及执行结果: 结论:通过执行结果可以看到,首先对sql进行了预编译处理,然后再传入参数,有效的避免了sql注入的问题,并且传参方式也比较简单…...
复制带随机指针的复杂链表
目录一、题目题目链接二、题目分析三、解题思路四、解题步骤4.1 复制结点并链接到对应原节点的后面4.2 处理复制的结点的随机指针random4.3 分离复制的链表结点和原链表结点并重新链接成为链表五、参考代码六、总结一、题目题目链接 题目链接:https://…...
【基于协同过滤算法的推荐系统项目实战-2】了解协同过滤推荐系统
本文目录1、推荐系统的关键元素1.1 数据1.2 算法1.3 业务领域1.4 展示信息2、推荐算法的主要分类2.1 基于关联规则的推荐算法基于Apriori的算法基于FP-Growth的算法2.2 基于内容的推荐算法2.3 基于协同过滤的推荐算法3、推荐系统常见的问题1、冷启动2、数据稀疏3、不断变化的用…...
线程安全(重点)
文章目录一.线程安全的概念1.1 线程安全的概念1.2 线程不安全的原因1.3 解决线程不安全二.synchronized-monitor lock(监视器锁)2.1 synchronized的特性(1)互斥(2)刷新内存(3)可重入2.2 synchronied使用方法1.直接修饰普通方法:2.修饰静态方法:3.修饰代码块:三.死锁3.1死锁的情…...
软件测试面试找工作你必须知道的面试技巧(帮助超过100人成功通过面试)
目录 问题一:“请你自我介绍一下” 问题二:“谈谈你的家庭情况” 问题三:“你有什么业余爱好?” 问题四:“你最崇拜谁?” 问题五:“你的座右铭是什么?” 问题六:“谈谈你的缺点” 问题七ÿ…...
Python快速入门:类、文件操作、正则表达式
类、文件操作、正则表达式1. 类2. 文件操作3. 正则表达式1. 类 类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。 定义类时,如有父类,则写在类名…...
java-day01
程序就是有序指令的集合 cmd执行java程序,javac Test.java,java Test java技术平台: javaSE标准版,javaEE企业版,javaME小型版 java语言面向对象的(oop),java跨平台性的(…...
玩转 Node.js 集群
一、介绍 Node 在 v0.8 时直接引入了 cluster 模块,用以解决多核 CPU 的利用率问题,同时也提供了较完善的 API,用以处理进程的健壮性问题。 cluster 模块调用 fork 方法来创建子进程,该方法与 child_process 中的 fork 是同一个…...
Day909.MySQL 不同的自增 id 达到上限以后的行为 -MySQL实战
MySQL 不同的自增 id 达到上限以后的行为 Hi,我是阿昌,今天学习记录的是关于MySQL 不同的自增 id 达到上限以后的行为的内容。 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。 虽然自然数是没有…...
JVM学习.01 内存模型
1、前言对于C、C程序员来说,在内存管理领域,他们拥有对象的“所有权”。从对象建立到内存分配,不仅需要照顾到对象的生,还得照顾到对象的消亡。背负着每个对象生命开始到结束的维护和管理责任。对于JAVA程序来说,因为J…...
R+VIC模型应用及未来气候变化模型预测
RVIC模型融合实践技术应用及未来气候变化模型预测在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
