登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

twyok的博客

hello 唐为右

 
 
 

日志

 
 
 
 

QT实现阴影窗口(一)(转)  

2013-03-15 17:00:06|  分类: Qt |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

QT的窗口对于一般的窗口程序来说,已经完全够用了。但有时候我们要求界面比较精美,或者还想自定义皮肤之类的话,就需要自己定义窗口。这里介绍一种简单的自定义窗口的方法。

自定义样式可以达到很多的自定义皮肤的效果,但自定义样式有时不能指定窗口的形状,或者实现窗口的阴影效果(使用QT的QGraphicsEffect定义阴影,但运行效率较低)。这样的话可以重载窗口的paintEvent函数实现自绘制窗口。

先准备一张有窗口阴影的背景图,然后在paintEvent函数里面使用QPainterx绘制这张图。

这里将窗口类命名为GraphicDialog

示例代码如下:

class GraphicDialog :
public QDialog
{
public:
GraphicDialog(QWidget* parent = NULL, Qt::WindowFlags f = 0/* Qt::FramelessWindowHint*/);
~GraphicDialog(void);
protected:
void paintEvent(QPaintEvent *);
QPixmap background;
};

在窗口类构造函数中:

setWindowFlags(Qt::FramelessWindowHint); //无标题窗口
setAttribute(Qt::WA_TranslucentBackground);

background.load(":/Images/DialogBackground");
在paintEvent中

QPainter p(this);
p.drawPixmap(0, 0, rect().width(), rect().height(), background);

实现效果如图:

QT实现阴影窗口(一)(转) - twyok - twyok的博客

这是实现的第一步,但这时窗口是无法用鼠标拖动的

  评论这张
 
阅读(1137)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018