基于项的图形视图

对于用户自定义窗口部件和绘制二个或者几个项来说,使用QPainter 是理想的。在绘图中,如果需要处理从几个到几万的项时,而且要求用户能够单击、拖动和选取项, Qt 的视图类提供了对这一问题的解决方案。

Qt 的视图体系包括一个由QGrapmcsScene 充当的场景和一些由QGrapmcsltem 的子类充当的场景中的项。场景(以及它的项)在视图中显示,这样用户就可以看到了,它由QGrapmcsView 类充当。同一场景可以在多个视图中显示一一例如,便于部分地显示一个大的场景,或者以不同的变换来显示场景。

上图提供了几个预定义的QGraphicsItem子类,包括QGraphicsLineItem、QGraphicsPixmapItem、QGraphicsSimpleTextItem(应用于纯文本),以及QGraphicsTextItem(应用于多文本)。也可以创建自己的QGraphicsItem子类。

GrapmcsScene 是一个图形项的集合。一个场景有三层:背景层(background layer)、项层(item layer) 和前景层(foreground layer)。背景层和前景层通常由QBrush 指定,但也可能需要重新实现drawBackground()和drawForegtouhd(),以便可以实现完全控制。如果想用一个图片作为背景,可以简单地创建该图片作为QBrush 纹理。前景画刷可以设置成半透明的白色,给足一种褪色的效果,或者设置成交叉模式,提供一种格子覆盖的效果。

场景可以告诉我们哪些项是重叠的,哪些是被选取的,以及哪些是在一个特定的点处,或者在一个特定的区域内。场景中的项或者是最高层的项(场景就是其父对象) ,或者是子项(它们的父对象是另外的项)。任何应用于项的变换都会自动地应用于子对象。

视图体系提供了两种分组项的方法。一种方法是简单地使一个项成为另一个项的子项。另外一种方法是使用QGraphicsltemGroup。把一个项添加到组中不会引起任何变换,这些组可以很方便地处理大量的项,就像它们是一个单独项一样。

QGraphicsView是一个窗口部件,这个窗口部件可以显示场景,在需要的情况下提供滚动条,以及影响场景绘制方式的变换能力。这有利于支持缩放和旋转,帮助浏览场景。

默认情况下, QGraþhicsView 使用Qt的内置二维图形引擎绘图,但这可以改变,在其创建完后调用setViewport()改为使用OpenGL 窗口部件。

这个体系使用三种不同的坐标系统一一视口坐标、场景坐标和项坐标一一而且还包含从一个坐标系统映射到另一个坐标的函数。视口坐标是QGraphicsView的坐标。场景坐标是逻辑坐标,用来布置场景中的项。项坐标针对某一项,并且以(0,0) 点为中心。当在场景中移动项时,项坐标保持不变。在实际应用中,我们常常只关心场景坐标(用于布置上层的项),以及项坐标(用于布置子项和绘制项)。依照本身的坐标系统绘制项意味着我们不用去关心项在场景中的位置或者关心需要应用的变换。

Qt4_基于项的图形视图相关推荐

  1. Qt知识回顾(十)——图形视图、动画和状态机框架

      Qt提供了图形视图框架(Graphics View Framework).动画框架(The Animation Framework)和状态机框架(The State Machine Framewo ...

  2. 【Qt】2D绘图之图形视图框架(一)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 场景(Scene) 04. 视图(View) 05. 图形项 06. 附录 01. 概述 在前面讲的基本绘图中,我们可以自 ...

  3. 基于Qt5图形视图框架的“俄罗斯方块”

    Qt5 图形视图框架QGraphicsView 1.图形视图框架包含三大类:场景类(QGraphicsScene),视图类(QGraphicsView),图元类(QGraphicsItem): 2.对 ...

  4. Qt修炼手册6_图形:图形视图框架

    1.前言 主要为了学习可以在GUI上有效显示或管理大量图形对象的API,以及进行显示.扩大.缩小等操作. 2.图形视图框架(Graphics View Framework) 图形视图框架使用BSP树算 ...

  5. [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

    [Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘 ...

  6. qt 实现拖动矩形角度_Qt 绘图之图形视图框架

    恒歌科技 2019/11/29 在Qt中我们可以通过QWidget的派生类,重写paintEvent()函数,使用QPainter绘制我们想要的任何内容.这种方法对于从QWidget派生的窗口部件很理 ...

  7. Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/117660217 长期持续带来更多项目与技术分享,咨询请 ...

  8. 第十一章 图形视图、动画和状态机框架——Qt

    一.图形视图框架的结构 图形视图框架提供了一个基于图形项的模型视图编程算法,主要由场景.视图和图形项三部分组成,这三部分分别由QGraphicsScence.QGraphicsView和 QGraph ...

  9. 图形视图(02):【类】QGraphicsScene [官翻]

    文章目录 详述 事件处理和传播 公共类型 enum ItemIndexMethod enum SceneLayer 属性 backgroundBrush: QBrush bspTreeDepth: i ...

最新文章

  1. CSS5:移动端页面(响应式)
  2. mysql数据迁移到teradata_Mysql迁移到达梦数据库-Mysql到DM的应用迁移-给自增列赋值-GroupBy语法不兼容...
  3. Mahout推荐算法API详解
  4. 【转载】开源且免费软件包分类列表
  5. 用css3和ico图片实现火狐社区的分享图标
  6. 翻转子串(important!)
  7. vc mscom控件串口接收不到数据问题
  8. html中label中的for属性
  9. 版本更新带来的缓存问题_【第1563期】缓存最佳实践 amp; maxage的陷阱
  10. 移动端rem布局实践
  11. python源代码怎么用_Python写完代码怎么用
  12. 8个免费和最佳开源视频流服务器软件
  13. 斯托克斯定理,de Rham上同调习题
  14. 归档日志路径三个参数DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n
  15. 什么是服务器并发量?并发量如何计算
  16. [CTS2019]氪金手游(容斥+树形背包DP)
  17. 2021程序员必看面试指南-进大厂年薪百万需要付出多少努力?你看看你们配吗......
  18. GOF23设计模式之适配器模式
  19. .net下 Windows Service 部署
  20. Unix时间戳与系统毫秒的转换

热门文章

  1. b站在线解析_一个小工具,教你如何轻松下载B站上喜欢的视频!
  2. 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
  3. python文件操作的方法_python中文件操作的基本方法
  4. 不同苹果账号体系的Capabilities情况
  5. java 多线程,线程安全等定义
  6. 搭建vue-cli脚手架
  7. c++如何解决大数组栈内存不够的问题
  8. 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
  9. 07_Python的控制判断循环语句1(if判断for循环)_Python编程之路
  10. Selenium 调用IEDriverServer打开IE浏览器