900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Qt修炼手册6_图形:图形视图框架

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

时间:2022-12-11 23:51:23

相关推荐

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

1.前言

主要为了学习可以在GUI上有效显示或管理大量图形对象的API,以及进行显示、扩大、缩小等操作。

2.图形视图框架(Graphics View Framework)

图形视图框架使用BSP树算法。BSP是一种将空间分为两部分的算法,其原理是通过二叉树形态分析大的地形,以构成节点信息,并参照此信息找出要绘制的对象。

使用BSP算法的图形视图可以快速发现图形对象。因此,通过Surface使用图形视图可以在GUI上快速绘制甚至数百个图形对象。

2.1 图形图像框架的基本要素

为了创建给予图形视图框架的应用程序,Qt提供了如下的类:

QGraphicsView:是为了在场景上显示控件而提供的类。QGraphicsView包括可视视图控件区域和用于显示大场景的滚动条区域。视图接受用户点击和触摸输入事件,而且,发送可视视图区域中发生的输入事件之前,可以控制场景事件。QGraphicsScene:可以保存控件,也可以处理键盘和触摸事件,还可以管理对象的焦点状态或被选中对象等的状态。QGraphicsItem:是为了在图形视图上实现图形对象而提供的类。QGraphicsItem提供成组管理图形对象的界面,以及显示矩形等形状的典型图形管理项目的QGraphicsRectItem类、像是椭圆图形对象的QGraphicsEllipseItem类、显示文本对象的QGraphicsTextItem类。

2.2 图形视图框架简单实例

#include "widget.h"#include <QtWidgets/QApplication>#include <qgraphicsview.h> //场景中现实空间提供的类#include <qgraphicsscene.h> int main(int argc, char *argv[]){QApplication a(argc, argv);QGraphicsScene scene;scene.addText("I love Qt programming.",QFont("Times",22,QFont::Bold));QGraphicsView view(&scene);view.show();return a.exec();}

输出结果:

int main(int argc, char *argv[]){QApplication a(argc, argv);QPainterPath path; //定义图形path.moveTo(340,30);path.cubicTo(340,30,350,5,400,30);QGraphicsScene scene; //定义场景scene.addText("I love Qt programming.",QFont("Times",22,QFont::Bold));scene.addPath(path,QPen(Qt::blue),QBrush(Qt::red)); //添加图形到场景中,并进行个性化设置QGraphicsView view(&scene);view.show();return a.exec();}

输出结果:

3.图形视图架构的设计思想

图形视图可以通过基于图形对象的方式实现模型/视图的编程模式。例如,图形视图可以通过QTableView、QTreeView、QListView等辅助类显示图形对象。而且场景包含了许多几何图形。

QGraphicsScene提供了图形视图场景管理器(Graphics View Scene),场景管理器实际上就是图形对象QGraphicsItem的容器。调用QGraphicsScene类的addItem()添加对象,调用Items()函数可以查找大量对象中的任意对象。

对象上可以使用键盘和焦点。调用函数SetFocusItem()可以将焦点移动到选择的图形对象,函数SetFocus()具有相同功能

还有一点需要注意,QGraphicsScene允许通过QGraphicsScene类的函数render()将部分场景绘制到绘图设备。

3.1 什么是视图?

QGraphicsView类提供了视图控件,用于显示场景中的对象。在同一场景可以访问不同视图,视图控件为显示区域提供了滚动条。视图控件可以在QWidget类派生的QGLWidget上使用函数setViewPort()。

3.2 图形对象都包括了哪些?

QGraphicsItem是场景中图形对象的上层类。图形视图已经提供了一些标准图形的类,例如矩形类(QGraphicsRectItem)、椭圆类(QGraphicsEllipseItem)、文本对象类(QGraphicsTextItem)。

对于自定义的用户而言,更常用的还是最基础的类——QGraphicsItem。因为他可以使用我们指定的对象,也就是说我们可以创建具有独特风格的形状。

总结一下,QGraphicsItem提供了以下功能:

支持鼠标按下、移动、释放和双击,同事还支持鼠标滚轮事件、悬浮事件、上下文菜单事件。提供键盘输入事件和焦点事件。支持拖放。通过父对象和子对象进行组合。支持碰撞检测。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。