前面在《Qt-MVC图形视图框架出识》中我们了解了Qt图形视图框架中三个最基本的类,弄清他们的关系,本片小文,我们将对QGraphicsView,QGraphiceScene,QGraphicsItem三个类继续深入探讨。了解在开发中必须要知道的操作以及对这三个类的认识。

  QGraphicsView:一个用于显示的类,为了实现对图元的

类名 作用与特性   坐标系

QGraphicsView

(视图类)

1)提供一个可视的窗口,用来显示图元。

2)在同一个场景中可以有多个视图,也可以为相同的数据提供几种不同的视图。

3) QGraphicsView是可以滚动的大窗口部件,如果需要使用OpenGL,则可以通过

  QGraphicsView::setViewport将视图设置为QGLWidget。

4)接收键盘和鼠标的输入事件,并将他们翻译成场景事件(将坐标系转换为场景的坐标)。

5)使用变换矩阵函数QGraphicsView::setMatrix可以变换场景的坐标,实现场景的

  缩放和旋转。

6)QGraphicsView提供QGraphicsView::mapToScene和          

QGraphicsView::mapFromScene用于与场景的坐标进行转换。

  间接继承于QWidget,坐标系自然也就和QWidget一样

QGraphiceScene

(场景类)

1)图元的容器,本身不可见,必须通过相连的视图类来显示以及与外界进行互操作。

2)场景类主要完成的工作包括提供对他包含的图元的操作接口和事件传递,管理各个图元的状态(如选择和焦点处理)。

   

QGraphicsItem

(图元类)

1)场景中各个图元的基类,可以是任何你想要的对象。具体需要自己实现,比如你希望他是一个图片,

那就继承该类然后利用组合的方式,在类内部包含一个QPixmap对象。其中有两虚函数需要实现

QGraphicsItem::boundingRect定义图元的边界

QGraphicsItem::paint定义了图元的重绘

2)功能:

  • 处理鼠标与键盘事件
  • 处理拖拽事件
  • 分组
  • 碰撞检测

此外图元有自己的坐标系,也提供图元和场景。图元还可以通过QGraphicsItem::matrix来进行自身的交换,可以包含子图元。

 

  边界自己定义,相对于自身QGraphicsItem::paint

绘制是以图元边界的左上角为原点的。对于QGraphicsScene,

他又是以图元的正中心为原点的,因为在使用QGraphicsItem::setPos(0,0)时,此时图元的中心正好能与QGraphicsScene的中心重合于一点。

  

  以上就是对Qt-MVC图形视图框架的解析,后续我会在代码实例层面做出解析。

Qt-MVC图形视图框架分解的更多相关文章

  1. Qt之图形视图框架

    简述 图形视图(Graphics View)提供了一个平台,用于大量自定义2D图元的管理与交互,并提供了一个视图部件(view widget)来显示可以缩放和旋转的图元. 框架包括一个事件传播架构,支 ...

  2. 用Qt图形视图框架开发拼图游戏

    用Qt的图形视图框架(Graphics View Framework)做了一个拼图游戏DEMO,演示了: QGraphicsView.QGraphicsScene.QGraphicsItem的基本用法 ...

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

    前话   Qt的图形视图框架,最核心的三个类为:QGraphicsScene.QGraphicsItem与QGraphicsView.   基于图形框架的高级白板软件Demo QGraphicsSce ...

  4. QT 图形视图框架

    https://blog.csdn.net/qq769651718/article/details/79357936 使用QPushButton.QLabel.QCheckBox等构成GUI的控件或自 ...

  5. Qt图形视图框架公开课资料

    接受CSDN学院的邀请,讲一次公开课,主题是Qt图形视图框架,报名链接在这里:http://edu.csdn.net/huiyiCourse/detail/228. 内容有两部分:自定义Item和拖放 ...

  6. Qt 2D绘图之六:图形视图框架的事件处理与传播

    一.简介 图形视图框架中的事件都是首先由视图进行接收,然后传递给场景,再由场景传递给相应的图形项.而对于键盘事件,它会传递给获得焦点的图形项,可以使用QGraphicsScene类的setFocusI ...

  7. Qt 2D绘图之五:图形视图框架的结构和坐标系统

    一.图形视图框架的结构 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们.但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动.检测它们的碰撞和叠加:或者我们想让自己绘制的图 ...

  8. Qt开发技术:图形视图框架(一)基本介绍

    前话   使用到Qt的视图框架.   Qt视图框架介绍 简介   图形视图框架(The Graphic View Framework)用于管理和与大量定制的二维图形项目交互,以及用于可视化项目的视图小 ...

  9. Qt-MVC图形视图框架初识

    使用QPushButton.QLabel.QCheckBox等构成GUI的控件或自定义图形时,开发应用程序会变得很简单.但是如果想在GUI中使用数十个或者数百个图形对象,向用户完美展示控制场景,则会受 ...

随机推荐

  1. $modal 参数 以及 使用方法

    $modal是一个可以迅速创建模态窗口的服务,创建部分页,控制器,并关联他们 $modal仅有一个方法open(options) templateUrl:模态窗口的地址 template:用于显示ht ...

  2. STL源代码剖析——基本算法stl_algobase.h

    前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...

  3. 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ

    [BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...

  4. 清除inline-block元素默认间距

    1. font-size:0; 2.letter-spaceing:-0.5em;

  5. Javascript学习之Function对象详解

    JavaScript中的Function对象,就是我们常说的函数对象.在JS中,所有的函数也是以对象的形式存在的. 语法 充当Function对象的构造函数使用,用于结合new关键字构造一个新的Fun ...

  6. Linux就该这么学--命令集合4(文件目录管理命令)

    1.touch命令用于创建空白文件与修改文件时间:(touch [选项] [文件]) 对于在Linux中的文件有三种时间: 更改时间(mtime):内容修改时间(不包括权限的) 更改权限(ctime) ...

  7. Hibernate主要查询方式

    1.hql查询 1.1 无参数的hql查询 1.2 带参的hql查询(分为问号占位和字符占位两种) Ps: 绑定各种类型的参数时用setParameter()绑定参数,如封装方法后用不定参数时循环绑定 ...

  8. Jpa生成mysql注释,添加ODBC数据源导入数据到EA

    通过Jpa 注解生成表注释 实体类中使用如下注解,生成表字段注释: @Column(name = "userid", columnDefinition = "varcha ...

  9. source insight 快捷键

    source insight 返回上一视图 快捷键:ALT+, 浏览项目符号:F7 全局浏览查找某个名称开头的函数或结构体等

  10. Java 发送Get和Post请求

    package com.htpt.superviseServices.dm.util; import java.io.BufferedReader; import java.io.IOExceptio ...