QGraphicsEffect特效(模糊,变色,阴影,透明)

本文详细介绍了Qt中QGraphicsItem的子类化方法及其实现绘图的过程,探讨了boundingRect函数的作用,并提供了QGraphicsEffect的四种特效(模糊、变色、阴影、透明)的具体应用实例。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值