qt不规则窗体的实现

qt不规则窗体的实现

ID:46907850

大小:116.00 KB

页数:5页

时间:2019-11-29

qt不规则窗体的实现_第1页
qt不规则窗体的实现_第2页
qt不规则窗体的实现_第3页
qt不规则窗体的实现_第4页
qt不规则窗体的实现_第5页
资源描述:

《qt不规则窗体的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、使用Qt制作SkinSkin(表皮)是制作比较酷的软件界面的有利工具.一个软件可以同时使用多种Skin以取得不同的外观,使同一个软件有截然不同的风格.用户可以根据自己的喜好选择不同的风格.本节介绍使用Qt制作Skin的方法.软件界面的风格变化可以通过两种机制完成,一种是通过设置主题(Themes),它使用界面库本身所具有的对界面组件(Components)的控制能力切换显示风格;另外一种是通过提供不同系列的图片来切换显示界面,即这里所讲的Skin。制作表皮有几个重要的因素值得考虑:1.使用无边界的窗口在XWindow下,无边界的窗口是指不受窗口管理器管理的边界不规则的

2、窗口。由于不受窗口管理器管理管理,所以软件窗口界面没有附加的标题条(TitleBar)等。在Qt中,建立无边界窗口的最简单的方法是设置QWidget的WFlags的值是WStyle_NoBorder。它定义在qnamespace.h中。不规则窗口的特点则要求对整个窗口使用图像掩码。使用X窗口形状的扩展(XShapeExtension)来达到要求。在Qt中可以直接使用,QBitmapbm;bm=*(Pixmaps[MASK]);setMask(bm);setBackgroundPixmap(*Pixmaps[BACKGROUND]);2.窗口的移动由于上述窗口不受窗口管

3、理器的管理的特性,所以移动窗口需要特殊处理,一般的方法是截取根Widget的鼠标按钮事件,自己处理鼠标点击和移动的事件。voidSkinDemo::mouseMoveEvent(QMouseEvent*e){QPointnewpos=e->globalPos();QPointupleft=pos0+newpos-last;move(upleft);}voidSkinDemo::mousePressEvent(QMouseEvent*e){last=e->globalPos();pos0=e->globalPos()-e->pos();}这里我们取得的鼠标位置是绝对位置

4、,即相对于根窗口的位置,同时也记录下窗口左上角的位置,当鼠标移动时,取得新的绝对位置,则窗口左上角的新位置应该是原来位置与鼠标移动的位置之差。3.按钮的制作对于表皮中的图像按钮,设置它的父类是QButton,这种按钮由两幅图片构成,一幅图片是正常状态(Normal),一幅图片是按钮按下时的状态(Activated)。有时也可以设置成四种状态,即增加禁止状态(Disabled)和鼠标指针进入时的状态(Hovered)。在例子(qt-skin-example.tar.gz)中,我们重新定义了鼠标按下和鼠标移动的事件处理函数,并且含有按钮的所有信息,主工作区的所有信息等。主

5、工作区的信息是它的位置和尺寸,主窗口的信息是它所使用的背景图片和图片的掩码(用来制造不规则窗口),所以整个主窗口的大小可以由图片的尺寸来决定。几个按钮的信息包含它们的位置,它们的大小由图片的大小来决定。下面是程序运行结果之一:关于作者IBMhasauthoredthisarticleQt 不规则窗体的实现Qt不规则窗体的实现准备两个图,一个是要显示在窗体的图片,一个是蒙板,蒙板的黑色部分是要保留的,白色是要去掉的。我准备了2张图,要显示的图片是"tmp.png",蒙板是"mask.png".如图下面的程序都有个毛病,不能拖出幕窗口以外,为什么呢?请注意一个是窗口和MA

6、SK图片的大小问题,还有就是只有无拖动栏的窗体MASK成不规则窗体才允许拖出屏幕窗口以外。GTK程序参考gtk_widget_shape_combine_mask附件: tmp.png(2.41KB) mask.png(1.64KB)_______________________Qt3的手工代码实现:CODE:#include#include#include#include#includeclassmyclass:publicQWidget{  pub

7、lic:      myclass();  protected:      voidmouseMoveEvent(QMouseEvent*e);      voidmousePressEvent(QMouseEvent*e);  private:      QPixmap*pixmap;      QBitmap*bitmap;      QPointlast,pos0;};myclass::myclass(){  setGeometry(0,0,120,120);  pixmap=newQPixmap("/doc/test/a/tmp.p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。