项目需要用Qt画波形,所以最近学习了Qt的graphics view framework,才看了一点,把暂时理解的内容记录一下。
主要的理解是通过豆子的《qt学习之路2》的贪吃蛇代码,链接如下:
http://www.devbean.net/2012/12/qt-study-road-2-snake-1/
------------------------------------------------------我是分割线-----------------------------------------------------------
1 graphics view framework的组成
主要有三部分:QGraphicsScene, QGraphicsView 和 QGraphicsItem
QGraphicsItem 相当于建筑用的材料
QGraphicsScene 相当于建筑用的图纸
QGraphicsView 相当于观察室
2 自定义Item
所有的Item都要继承自基类QGraphicsItem
自定义的Item要重载函数
QRectF boundingRect() const;
这个函数的作用就是定义以块长方形区域,用以决定Item可显示的范围
需要定义Item的形状时,要重载函数:
QPainterPath shape() const;
重载如下函数用以在每次刷新时重新绘制图形:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *);
其中关键语句如下:
painter->fillPath(shape(), Qt::yellow);
参数一是绘制时的形状,参数二是绘制用的笔刷
每次刷新时进行的动作由重载的如下函数决定:
void advance(int step)
其中step有两个值,当为0时,进行更新的准备,当为1是进行更新的动作。
3 添加事件
可以专门新建一个类负责事件控制
这个类的构造函数要以QGraphicsScene的指针为参数
然后在这个类中为Scene添加要控制的Item
重载如下函数进行时间监听:
bool eventFilter(QObject *object, QEvent *event)
在这个函数中调用自己写的控制函数就可以了
这个只是一个初步的认识,错误肯定不少