应用场景:
不规则的窗体、窗体上下重叠时需要鼠标穿透、只显示部分区域时
实现:
实现方式一:借助setMask(rect)函数。该函数将设置rect为可见区域,rect可以是控件的规则区域,也可以是bitmap范围。
//给widgetA增加一层遮罩,遮罩的大小范围是pushButton的矩形区域,这样在其它地方只能看到widgetA上pushButton的控件范围,其它范围不可见
widgetA->setMask(pushButton->rect());
//给widget设置图片遮罩,图片可以是不规则的位图,这样可以让widget看成是一个不规则的窗体
ShapeWidget::ShapeWidget(QWidget *parent)
: QWidget(parent)
{
QPixmap pix;
pix.load("16.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
resize(pix.size());
setMask(QBitmap(pix.mask()));
setWindowFlag(Qt::FramelessWindowHint);
}
void ShapeWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0,0,QPixmap("16.png"));
}