zoukankan      html  css  js  c++  java
  • Qt-MVC图形视图框架分解

      前面在《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图形视图框架的解析,后续我会在代码实例层面做出解析。

    ————雁过留痕,风过留声,人的记忆是一种很不靠谱的东西。记下这些笔记,希望自己能够在需要的时候有所回忆,也希望能够帮助哪些需要获取这些知识的人。
  • 相关阅读:
    vue项目中使用bpmn-流程图json属性转xml(七篇更新完成)
    vue项目中使用bpmn-流程图xml文件中节点属性转json结构
    vue项目中使用bpmn-自定义platter
    vue项目中使用bpmn-为节点添加颜色
    vue项目中使用bpmn-节点篇(为节点添加点击事件、根据id找节点实例、更新节点名字、获取指定类型的所有节点)
    vue项目中使用bpmn-流程图预览篇
    vue项目中使用bpmn-基础篇
    万事开头难——学习新知识是要打好基本规则基础的
    老川交易的艺术——普通的一周生活——读后感
    艾宾浩斯遗忘曲线表格——使用
  • 原文地址:https://www.cnblogs.com/wangkeqin/p/9114459.html
Copyright © 2011-2022 走看看