QT开发与实践Qt图形视图框架课件解析.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 Qt 5图形视图框架 7.1 图形视图体系结构 7.2 图形视图示例 7.1 图形视图体系结构 7.1.1 Graphics View的特点 (1)Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。 (2)Graphics View支持事件传播体系结构,可以使图元在场景(scene)中的交互能力提高一倍,图元能够处理键盘事件和鼠标事件。其中,鼠标事件包括鼠标按下、移动、释放和双击,还可以跟踪鼠标的移动。 (3)在Graphics View框架中,通过二元空间划分树(Binary Space Partitioning,BSP)提供快速的图元查找,这样就能够实时地显示包含上百万个图元的大场景。 7.1.2 Graphics View的三元素 Graphics View框架结构主要包含三个类,场景类(QGraphicsScene)、视图类(QGraphicsView)和图元类(QGraphicsItem),统称为“三元素”。 它们三者之间的关系如图7.1所示。 7.1.3 GraphicsView的坐标系统 1.场景坐标 QGraphicsScene类的坐标系以中心为原点(0,0),如图7.2所示。 7.1.3 GraphicsView的坐标系统 2.视图坐标 QGraphicsView类继承自QWidget类,因此它与其他的QWidget类一样,以窗口的左上角作为自己坐标系的原点,如图7.3所示。 7.1.3 GraphicsView的坐标系统 3.图元坐标 QGraphicsItem类的坐标系,若在调用QGraphicsItem类的paint()函数重绘图元时,则以此坐标系为基准,如图7.4所示。 7.1.3 GraphicsView的坐标系统 Graphics View框架提供了多种坐标变换函数,见表7.1。 7.2 图形视图示例 7.2.1 飞舞的蝴蝶例子 (1)新建Qt Gui应用,项目名为“Butterfly”,基类选择“QMainWindow”,类名命名默认为“MainWindow”,取消“创建界面”复选框的选中状态。单击“下一步”按钮,最后单击“完成”按钮,完成该项目工程的建立。 (2)在“Butterfly”项目名上单击鼠标右键,在弹出的快捷菜单中选择“添加新文件...”菜单项,在弹出的对话框中选择“C++ 类”选项。单击“选择”按钮,弹出“C++ 类向导”对话框,在“基类”后面的下拉列表框中选择基类名“QObject”,在“类名”后面的文本框中输入类的名称“Butterfly”。 (3)单击“下一步”按钮,单击“完成”按钮,添加文件“butterfly.h”和“butterfly. cpp”。 (4)Butterfly类继承自QObject类、QGraphicsItem类,在头文件“butterfly.h”中完成的代码具体内容。 7.2.1 飞舞的蝴蝶例子 (5)在源文件“butterfly. cpp”中完成的代码具体内容如下: #include butterfly.h #include math.h ? const static double PI=3.1416; ? Butterfly::Butterfly(QObject *parent) { up = true; pix_up.load(up.png); pix_down.load(down.png); ? startTimer(100); } 7.2.1 飞舞的蝴蝶例子 boundingRect()函数为图元限定区域范围。此范围是以图元自身的坐标系为基础设定的。具体实现代码内容如下: QRectF Butterfly::boundingRect() const { qreal adjust =2; return QRectF(-pix_up.width()/2-adjust,-pix_up.height()/2-adjust, pix_up.width()+adjust*2,pix_up.height()+adjust*2); } 7.2.1 飞舞的蝴蝶例子 在重画函数paint()中,首先判断当前已显示的图片是pix_up还是pix_down。实现蝴蝶翅膀上下飞舞效果时,若当前显示的是pix_up图片,则重绘pix_down图片,反之亦然。具体实现代码内容如下: void Butterfly::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {

文档评论(0)

南非的朋友 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档