当前位置: 首页 > news >正文

Qt 游戏场景 图元

一:Graphics View框架主要特点

1、 Graphics View框架结构中可以利用QT绘图系统的反锯齿、OpenGL(硬件加速)工具改善绘图性能。

2、 Graphics View框架支持事件传播体系结构,使场景内的图元交互能力提高一倍。图元处理鼠标键盘事件,如鼠标按下、移动、释放、点击和双击事件,也跟踪鼠标移动。QWItget

3、在Graphics View框架中通过二元空间划分树,提供快速的图元查找,这样能实时的显示大场景。

二:Graphics View框架

Graphics View框架结构主要包含了场景类(QGraphicsScene(容器))、视图类 (QGraphicsView)和图元类(QGraphicsItem)。

三:QGraphicsScene

QGraphicsScene类为管理大量的2D图形item提供了一个管理界面,做为item的容器,它配合使用QGraphicsView使用来观察items,例如线,矩形,文本或者自定义的items 。

注意:QGraphicsScene场景没有自己可见的外观,他只管理items,需要创建一个QGraphicsView Widget来让场景可见。

四:QGraphicsView

QGraphicsView提供一个显示QGraphicsScene内容的窗口,在构造时候把场景对象作为参数,或者之后使用setScene()来设置view的场景,该框架还包含一个事件传递机制,允许画布和画布上的图元之间精确地双向交互。图元处理鼠标键盘事件,如鼠标按下、移动、释放、点击和双击事件,也跟踪鼠标移动。

五:实例

实例1:

QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();

实例2:

QGraphicsView view;
QGraphicsScene scene;
Scene. setSceneRect();
View. setScene(scene);

虚函数void resizeEvent(QResizeEvent *event); 

六:QGraphicsScene坐标系统

七:QGraphicsView坐标

QGraphicsView 类继承自QWidget类,因此它和其他的QWidget类一样以窗口的左上角作为自己坐标系的原点。 

八:QGraphicsItem

QGraphicsItem类是视图框架的一部分,是在一个QGraphicsScene中最基本的图形类,它为绘制你自己的item提供了一个轻量级的窗口,包括声明item的位置,碰撞检测,绘制重载和item之间的相互作用通过事件处理  

九:QGraphicsItem的系统派生

Qt提供了一系列标准的items对一些常见的图像,非常的方便,有下面这些:

QGraphicsEllipseItem  提供一个椭圆item
QGraphicsLineItem     提供一条线的item
QGraphicsPathItem     提供一个任意的路径item
QGraphicsPixmapItem   提供一个图形item
QGraphicsPolygonItem  提供一个多边形item
QGraphicsRectItem     提供一个矩形item
QGraphicsSimpleTextItem 提供一个简单的文本item
QGraphicsTextItem     提供一个文本浏览item

十:自己派生QGraphicsItem

写自己的item图形,首先应该继承QGraphicsItem,然后重写他的两个纯虚公共函数,boundingRect()和paint(),第一个函数返回绘制item大概的区域,第二个函数用来绘制item内容

十一:坐标系

QGraphicsItem则有自己的坐标系,在调用QGraphicsItem类的paint()函数重画项目时是以此坐标系为基准。 

相关文章:

  • 二叉树难题破解
  • 【算法面试必刷Java版二十】数组中的逆序对
  • Postman接口断言上下游参数传递
  • Amazon S3 Compatibility 兼容API 封装AWS S3工具类 生成预前面url跨域问题解决
  • 请问各位大神如何写论文的摘要?
  • C++ 基础语法
  • 什么是ForkJoin
  • OpenCV-漫水填充cv::floodFill
  • 【精品】SpringSecurity在前后端分离项目中的应用
  • MySQL知识点总结_1
  • 深入理解Python生成器
  • SpringBoot+Vue项目校园商铺系统
  • “不学数学就去当厨子”,兰大校友入选全球竞赛最强10人,决赛最后几小时才想起做题...
  • Python基础_判断语句(if、elif、else)、if 嵌套、逻辑运算符(and、or、not )、随机数的处理
  • 【C语言】小游戏系列——扫雷(内含详细过程)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • conda常用的命令
  • css布局,左右固定中间自适应实现
  • extract-text-webpack-plugin用法
  • JavaScript服务器推送技术之 WebSocket
  • log4j2输出到kafka
  • Meteor的表单提交:Form
  • node-glob通配符
  • Redis 中的布隆过滤器
  • session共享问题解决方案
  • Solarized Scheme
  • spark本地环境的搭建到运行第一个spark程序
  • springboot_database项目介绍
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 测试如何在敏捷团队中工作?
  • 高性能JavaScript阅读简记(三)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于for循环的简单归纳
  • 简单易用的leetcode开发测试工具(npm)
  • 警报:线上事故之CountDownLatch的威力
  • 那些年我们用过的显示性能指标
  • 什么软件可以剪辑音乐?
  • 我这样减少了26.5M Java内存!
  • 移动端高清、多屏适配方案
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #NOIP 2014#Day.2 T3 解方程
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2)STL算法之元素计数
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)http协议
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 受管制代码
  • .NET/C# 使用 SpanT 为字符串处理提升性能