查看完整版本: [-- GlowEffect——发光效果的QGraphicsEffect --]

QTCN开发网 -> Qt代码秀 -> GlowEffect——发光效果的QGraphicsEffect [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

roywillow 2012-08-23 22:11

GlowEffect——发光效果的QGraphicsEffect

闲来无事继承QGraphicsEffect,实现了一个发光效果:
[attachment=8804]
或许与跑马灯合用会有不错的效果哦
感觉有些地方还可以精简一下,效率好像也没有最优,希望大家能一起修正一下。
[attachment=8805]

XChinux注:该代码已加入Tianchi项目:
https://github.com/qtcn/tianchi/blob/master/inc/Gui/GlowEffect.h

mewjerry 2012-08-23 22:28
-。-看起来真不错,希望效率也还好;Qt的effect系列效果最大的缺点就是效率,它几乎在每次repaint的时候都会重绘,对于一个需要频繁重绘的Widget,就力不从心了。。

周大侠 2012-08-27 20:45

kh99827765 2012-12-04 14:03
必须顶……

shiziyang 2012-12-04 14:16
mac下跑貌似没效果啊

roywillow 2013-01-14 19:47
really?
贴上你的测试代码和截图?

shiziyang 2013-01-15 10:17
[attachment=9570]

直接拿附件的工程在mac下现编现跑

unizii 2013-02-01 23:46
如果不经常repaint那光晕岂不是跟内容不同不了??????????

unizii 2013-02-01 23:58
[attachment=9667]

看来在KDE下才是真正的原生样式,和Oxygen主题很搭配!!

unizii 2013-02-02 00:05
好酷的效果啊
[attachment=9668]

hitler++ 2013-02-22 19:42

roywillow 2013-04-21 10:49
今个突然想起来这个东西,回来看了看……
待我跑一下看看

roywillow 2013-04-21 10:50
O.O 有种无心插柳柳成荫的赶脚

roywillow 2013-04-21 11:52
Mac OS X 10.8测试没问题啊……

XChinux 2013-04-21 13:32
楼主可整理一下添加到https://github.com/qtcn/tianchi库中去。

roywillow 2013-04-21 21:15
学校里访问github无力,git咱也是个新手,加上似乎最近课程略紧……
如果这代码天池用得到的话,随便拿去用就好了

XChinux 2013-04-22 08:13
引用第15楼roywillow于2013-04-21 21:15发表的 回 14楼(XChinux) 的帖子 :
学校里访问github无力,git咱也是个新手,加上似乎最近课程略紧……
如果这代码天池用得到的话,随便拿去用就好了

那我来整理吧,感谢楼主的贡献。

XChinux 2013-04-22 09:14
qt_blurImage()这个函数是在哪里的?找到了。

XChinux 2013-04-22 09:57
已加入Tianchi项目:
https://github.com/qtcn/tianchi/blob/master/inc/Gui/GlowEffect.h

ppdayz 2013-04-22 10:15
刚刚去下了tianchi的,编译了下,提一点建议,发现里面文件的编码有的是UTF-8,有的是GKB的,最好编码都能统一成UTF-8的,这样查看源码的时候会方便一点

roywillow 2013-04-22 10:29
谢老大
不过代码中用到的那些Q_宏一直理解不了,有啥介绍吗?

XChinux 2013-04-22 11:26
Q_DISABLE_COPY(GlowEffect)
这个是禁止实现operator = ,以防止拷贝

Q_DECLARE_PRIVATE(GlowEffect)

这个是声明d_func()来方便返回 GlowEffectPrivate类成员d_ptr(可以看qglobal.h里的宏定义),这样就不用自己来进行类型转换了.

Q_D(GlowEffect);

这个相当于GlowEffectPrivate *d = d_ptr();
所以后面就能用d->radius  这样来使用GlowEffectPrivate类的东西了.

同样的
Q_Q(GlowEffect);相当于GlowEffect *q = q_func();这样就能在GlowEffectPrivate类的成员函数里使用q->xxxx来调用主类的成员了.

以上实现,是参考Qt的数据隐藏方法,凡是有私有成员(包括函数/变量)时,都定义在GlowEffectPrivate类里, 如此修改代码时,接口部分(即GlowEffect类声明)不用改变,  对应的类接口使用说明/使用到这个类头文件的其它文件也就不需要重新编译.

XChinux 2013-04-22 11:27
引用第19楼ppdayz于2013-04-22 10:15发表的  :
刚刚去下了tianchi的,编译了下,提一点建议,发现里面文件的编码有的是UTF-8,有的是GKB的,最好编码都能统一成UTF-8的,这样查看源码的时候会方便一点

统一用GBK的吧,以源代码级兼容msvc/gcc等.

roywillow 2013-04-22 11:28
嗯,明白了

XChinux 2013-04-22 11:29
在GlowEffect.cpp最后加了#include "moc_GlowEffect.cpp",这是为了处理在Qt4中编译moc_xxx.cpp时不能自动将Tianchi namespace包含进去的问题.   Qt源代码是这样写的,我不知道有没有其它的方法(含MOC的宏)来专门处理这个问题.

shiziyang 2013-04-22 15:32
可能是qt库的问题吧,我是mac10.6+qt4.7.0-carbon库的,大概cocoa库的就没问题

roywillow 2013-04-22 21:00
这个当时写代码的时候应该是4.8,现在测试windows和mac下5.0.2也没问题
只是对图像进行了一些模糊和绘制,会跟carbon有关么……?

roywillow 2014-09-06 11:17
woniu600:你好,我问下..
请问在效果使用完后,怎么删除这个效果??      
....... (2014-09-04 20:51) 

呃……还真没注意过
强制调用一下pushButton->update()呢?

ygyuuu 2015-05-07 09:55
XChinux:qt_blurImage()这个函数是在哪里的?找到了。
 (2013-04-22 09:14) 

undefined reference to `qt_blurImage(QImage&, double, bool, int)'
是个外部的 怎么找到

ygyuuu 2015-05-07 10:07
undefined reference to `qt_blurImage(QImage&, double, bool, int)'
楼主,这个怎么破

stlcours 2015-07-27 15:48
简单实用~楼主后生可畏

862343646 2015-08-12 10:02
楼主,恩人啊

姜小白 2016-04-23 10:09

big_mouse 2020-04-15 09:45


查看完整版本: [-- GlowEffect——发光效果的QGraphicsEffect --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled