• 16046阅读
  • 17回复

Qt实现蒙版效果 [复制链接]

上一主题 下一主题
离线cfxks1989
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2012-10-19
关键词: QT4
学习Qt已经有半年多了,经常看别人的作品。按耐不住,也发点简单的东西给大家借鉴下吧。
现在各大网站的自带的图片显示系统都是背景半透明,正中间显示图片。称之为:蒙版效果。
那么Qt怎么实现这种效果呢?
我自己做了点尝试,大家可以借鉴下:发个效果图先


正如图片显示的正中间图片是显示出来的,其他部分半透明。
实现起来其实很简单,就是对函数paintEvent(QPaintEvent *)进行重载。
编译环境是:vs2008+qt4.7.3.
在ubuntu环境编译也能通过。PS:如果是虚拟机看不到效果。
源代码:
Test.7z (2307 K) 下载次数:665


离线0354030w

只看该作者 1楼 发表于: 2012-10-20
效果不错!感谢楼主分享!!一库一库亚美爹!
离线ninsun

只看该作者 2楼 发表于: 2012-10-21
如果我没有记错……
完全可以不使用重载paintEvent函数来实现全屏蒙板的效果的……
只需要做一个全屏透明的widget,然后在这个widget上面放QLable标签,贴个半透明图片就能解决了……
离线cfxks1989

只看该作者 3楼 发表于: 2012-10-22
回 2楼(ninsun) 的帖子
这么做图片也是半透明的吧
离线345161974

只看该作者 4楼 发表于: 2012-10-23
支持下楼主,顺便学习下.
离线ninsun

只看该作者 5楼 发表于: 2012-11-04

请参考以上效果……
可以做到绘制Widget的时候不绘制背景但是可以绘制多个载入了png图片的QLabel……
    setAttribute(Qt::WA_TranslucentBackground);
    setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
只需这两句话就能实现无边框透明背景了
剩下要做的就是弄多张图片简单的用QLabel载入,然后放在合适的地方去了……
离线ninsun

只看该作者 6楼 发表于: 2012-11-04
不过好象唯一有问题的就是任务栏了……
不过那个应该可使用其他方法来处理的……我记得有办法可以在最大化的时候也让任务栏消失来着……不过那个可能是windows下的效果吧……
离线ninsun

只看该作者 7楼 发表于: 2012-11-04
好吧,仔细一看……原来咱俩用的方法是一样的
不过我没有重载paint而已……
离线cfxks1989

只看该作者 8楼 发表于: 2012-11-06
呵呵,很久都没来逛逛了。多一条思路,说不定啥时候就用上了~
离线sendltd

只看该作者 9楼 发表于: 2013-02-28
这方法在Qt5.0.1失效了。。
离线justwake

只看该作者 10楼 发表于: 2013-02-28
回 9楼(sendltd) 的帖子
出现什么了情况,能说明下吗   ?
离线lcl_data
只看该作者 11楼 发表于: 2013-03-07
调用setMask就可以实现蒙版效果吧
离线liuboadsl
只看该作者 12楼 发表于: 2013-03-09
这个不错,其实,俺拿了你的源码,改了改,却说是自己写的。
唉,我真是无药可救了
http://bbs.kafan.cn/thread-1456492-1-1.html
离线liuboadsl
只看该作者 13楼 发表于: 2013-03-09
回 11楼(lcl_data) 的帖子
11楼的兄弟,麻烦给个栗子行不,别光说不练啊
离线liuyuanan

只看该作者 14楼 发表于: 2013-03-11
谢谢楼主分享,效果不错
离线kidscanan

只看该作者 15楼 发表于: 2013-04-24
QML实现这个功能也很简单,要设一下透明度
离线qusiba111qu
只看该作者 16楼 发表于: 2013-05-23
感谢楼主分享
离线neil-wen

只看该作者 17楼 发表于: 2013-08-19
谢谢  楼主分享
快速回复
限100 字节
 
上一个 下一个