Qt中不规则窗体的实现,是在原来窗口图形的基础上,增加图形遮罩,剩余部分为最终显示的窗口图形。
由于窗体需要重绘,窗体内鼠标时间和窗口移动需要手动设置。因此不规则窗体的实现分3个部分,利用图片和遮罩,绘制窗体外观,然后设置窗体内的鼠标点击时间和鼠标移动事件。
1、窗体重绘
首先要设置一个图形遮罩,在父类ShapeWidget中实现:
ShapeWidget::ShapeWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::ShapeWidget)
{
ui->setupUi(this);
QPixmap pix;
pix.load(":/resource/mask3.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
//调用QPixmap的load函数为QPixmap对象填入图像值
resize(pix.size());//重设主窗体尺寸为所读取图片大小,若不设置则为原窗体大小
setMask(QBitmap(pix.mask()));//设置遮罩,被遮罩遮住的部分看起来就是透明的。
}
这里加载了图片mask.png,设置窗体尺寸以适应图片,并对图片以外的透明部分设置遮罩。遮罩的实现是通过判断图片某一个位置的像素点是否有数值