您的位置:首页 > 编程语言 > Qt开发

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、正常显示前:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: