目录
一:Graphics View框架
Graphics View框架主要特点
1. Graphics View框架结构中可以利用QT绘图系统的反锯齿、OpenGL(硬件加速)工具改善绘图性能
2. Graphics View框架支持事件传播体系结构,使场景内的图元交互能力提高一倍
图元处理鼠标键盘事件,如鼠标按下、移动、释放、点击和双击事件,也跟踪鼠标移动 QWItget
3.在Graphics View框架中通过二元空间划分树,提供快速的图元查找,这样能实时的显示大场景
Graphics View框架结构如下
二:场景 视图 图元 案例实操
main.cpp
#include "widget.h"
#include <QApplication>
#include"indexwin.h"
#include<QGraphicsScene> //场景
#include<QGraphicsRectItem>//图元
#include<QGraphicsView> //视图
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// IndexWin w;
// w.show();
QGraphicsScene *scene = new QGraphicsScene; //场景
QGraphicsRectItem *item = new QGraphicsRectItem(100,100,50,50);//矩形项
QGraphicsLineItem *item1 = new QGraphicsLineItem(10,10,50,50); //直线项
scene->addItem(item);//项添加到场景
scene->addItem(item1);
QGraphicsView *view = new QGraphicsView;//视图
view->setScene(scene);//视图关联场景
view->show(); //显示视图
return a.exec();
}
三:场景 视图 图元 的基本概念
场景【QGraphicsScene】
QGraphicsScene类为管理大量的2D图形item提供了一个管理界面,做为item的容器,它配合使用QGraphicsView使用来观察items,例如线,矩形,文本或者自定义的items
注意:QGraphicsScene场景没有自己可见的外观,他只管理items,需要创建一个QGraphicsView Widget来让场景可见
视图【QGraphicsView】
QGraphicsView提供一个显示QGraphicsScene内容的窗口,在构造时候把场景对象作为参数,或者之后使用setScene()来设置view的场景,该框架还包含一个事件传递机制,允许画布和画布上的图元之间精确地双向交互
图元处理鼠标键盘事件,如鼠标按下、移动、释放、点击和双击事件,也跟踪鼠标移动
实例1
QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();
实例2
QGraphicsView view;
QGraphicsScene scene;
Scene. setSceneRect();
View. setScene(scene);
//虚函数void resizeEvent(QResizeEvent *event);
场景坐标系统和视图坐标
图元【QGraphicsItem】
QGraphicsItem类是视图框架的一部分,是在一个QGraphicsScene中最基本的图形类,它为绘制你自己的item提供了一个轻量级的窗口,包括声明item的位置,碰撞检测,绘制重载和item之间的相互作用通过事件处理
图元QGraphicsItem的系统派生
自己派生图元QGraphicsItem
写自己的item图形,首先应该继承QGraphicsItem,然后重写他的两个纯虚公共函数,boundingRect()和paint(),
第一个函数返回绘制item大概的区域,第二个函数用来绘制item内容
图元QGraphicsItem 坐标系