1、子类化QGraphicsItem的问题
子类化是为了实现自定义的图形效果,子类化该类有两个虚函数要实现:
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget /* = 0 */);
virtual QRectF boundingRect() const;
paint一目了然,是自己实现绘图的地方,option暂时没深入了解。
boungdingRect函数遇到一点点波折,起初以为是返回在Scene的矩形,来限定Item的位置,所以返回这样的值QRect(0,0,width,height),结果是绘制结果总是比指定位置大一倍,仔细阅读文档发现并非如此,该函数是返回自身坐标系的一个区域,代表Item绘制的范围,以供框架对如何重绘进行分析判断。目前返回QRect(0,0,width,height)已正常。
2、QGraphicsEffect特效(模糊,变色,阴影,透明)
QGraphicsBlurEffect
该类用应产生模糊效果,主要函数setBlurRadius(qreal blurRadius),用于控制图形元素的模糊度,数值越大越模糊。使用该类例子如下:
QGraphicsBlurEffect *e0 = newQGraphicsBlurEffect(this);
e0->setBlurRadius(0.2);
item[0]->setGraphicsEffect(e1);//item[0] 为QGraphicsItem指针
QGraphicsColorizeEffect
该类提供了使用另外一种颜色对当前图形的一种着色功能。主要函数是setColor(QColor)和setStrength (qreal strength),指定了着色和着色强度。使用该类例子如下
QGraphicsColorizeEffect *e1 = new QGraphicsColorizeEffect(this);
e1->setColor(QColor(0,0,192));
item[1]->setGraphicsEffect(e1);
QGraphicsDropShadowEffect
该类提供了图形元素的阴影效果,用于增加立体感。主要设置函数有3个,setColor()用于设定阴影的颜色,setBlurRadius()用于设定阴影的模糊度,setOffset (qreal dx,qreal dy)用于设定在哪个方向产生阴影效果,如果dx为负数,则阴影在图形元素的左边。使用该类例子如下
QGraphicsDropShadowEffect *e2 = new QGraphicsDropShadowEffect(this);
e2->setOffset(8,8);
item[2]->setGraphicsEffect(e2);
QGraphicsOpacityEffect
该类用于图形元素的透明效果,主要函数是setOpacity(qreal opacity),用于设置透明度,参数值在0和1.0之间。也可以设置部分透明效果,需要调用的函数是setOpacityMask (QBrush mask)。使用该类例子如下
QGraphicsOpacityEffect *e3 = new QGraphicsOpacityEffect(this);
e3->setOpacity(0.7);
item[3]->setGraphicsEffect(e3);
3、QGraphicsView刷新:
经测试QGraphicsView对Update做了优化处理,经常调用update不会导致整个画面的更新,目前找到的办法是让QGraphicsScene进行update,在刷新需求比较急切时才应该使用该方法。
4、QGraphicsView在点击工具栏时抖动
直接将QGraphicsView设置为了QMainwindow的centerwidget,在点击QAction时画面内容会跳动,暂不知道为什。
另附一篇介绍,谢谢作者分享:http://blog.csdn.net/doctorsc/article/details/6774983