Qt异形按钮的创建
2015-06-05 17:10
369 查看
网上和很多关于Qt异性按钮的创建例子,不过大多都是通过导入png图片,然后setMask,来创建异性按钮。利用的原理是:图片带有alpha通道,将alpha值作为掩码,从而有效的屏蔽对应的区域。
这里将介绍不用alpha通道,但方法是类似的:
1、首先我们自己创建一个bitmap,给定其大小;(注意是从本地导入,而是在内存中直接创建)
2、对bitmap进行颜色填充,因为这样创建的bitmap其内容是没有进行初始化的,这里相当于对其进行初始化;
3、在bitmap上进行绘制图形
4、将bitmap设置为对应控件的mask
这里利用的原理是:控件不会显示白色的像素,而作用同png的alpha值相同。
下面列举的如何设置异性按的核心代码:
1、正常显示前:
效果如下:
2、设置方式1:
效果如下:
3、设置方式2:
效果如下:
最后再说明一点,这里我们是直接在内存中创建bitmap的,当然基于该原理,我们也可以通过导入本地上的bmp文件来进行设置控件的mask,从而达到预期的效果!!!
源代码下载地址:http://download.csdn.net/detail/a812073479/8776583
这里将介绍不用alpha通道,但方法是类似的:
1、首先我们自己创建一个bitmap,给定其大小;(注意是从本地导入,而是在内存中直接创建)
2、对bitmap进行颜色填充,因为这样创建的bitmap其内容是没有进行初始化的,这里相当于对其进行初始化;
3、在bitmap上进行绘制图形
4、将bitmap设置为对应控件的mask
这里利用的原理是:控件不会显示白色的像素,而作用同png的alpha值相同。
下面列举的如何设置异性按的核心代码:
1、正常显示前:
QPushButton * pButton = new QPushButton(this); pButton->resize(100,100); pButton->move(50,50);
效果如下:
2、设置方式1:
QBitmap bitmap(100,100); QPainter painter(&bitmap); painter.fillRect(0,0,100,100,Qt::white); //将整个bitmap设置为白色 painter.setBrush(Qt::black); painter.drawRect(15,15,70,70); //在bitmap的中间绘制一个矩形,颜色为黑色 pButton->setMask(bitmap); //设置掩码,由于只有中间部分为黑色,所以只会显示中间矩形区域部分
效果如下:
3、设置方式2:
QBitmap bitmap(100,100); QPainter painter(&bitmap); painter.fillRect(0,0,100,100,Qt::black); //将整个bitmap设置为黑色!!! painter.setBrush(Qt::white); painter.drawRect(15,15,70,70); //在bitmap的中间绘制一个矩形,颜色为黑色 pButton->setMask(bitmap); //设置掩码,由于中间部分为白色,所以不会显示中间的矩形局域
效果如下:
最后再说明一点,这里我们是直接在内存中创建bitmap的,当然基于该原理,我们也可以通过导入本地上的bmp文件来进行设置控件的mask,从而达到预期的效果!!!
源代码下载地址:http://download.csdn.net/detail/a812073479/8776583
相关文章推荐
- 读Pyqt4教程,带你入门Pyqt4 _008
- QtCreator的配置文件
- 终极精简编译Qt5,精简OpenGL,QMainWindow,ICU,WebKit等
- 读Pyqt4教程,带你入门Pyqt4 _007
- Qt使用openmp并行化加速程序
- QTP远程运行无法对windos object进行操作
- QT5.4 vs2013静态加载插件的sqlite静态编译
- Qt socket。The bound address is already in use
- qt的一些技巧
- qt 窗口的缩放和滚动条的使用
- QT实现2048小游戏
- Ubuntu 下 Gtk与Qt编译环境安装与配置
- QT 串口接收数据库16进制字符串
- QT QString字符串转16进制串口发送数据
- 2015.6.5 qt学习笔记 accept()概念
- Qt 嵌入式程序 运行时遇到*** glibc detected ***等解决方法
- win7下无法安装QTP-少了Microsoft Visual c++2005 sp1运行时组件
- Qt出现警告 Unescaped backslashes are deprecated!解决办法
- 如何实现基于MFC对话框的PCL显示(1)
- Qt编程之实现属性窗口编辑器