异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步:
1、设置遮罩区
2、绘制图片
使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话少说,以实现绘制一只蝴蝶(蝴蝶为半透明)为例,效果如下:
头文件:
1: #include <QWidget>2: class TransDialog : public QWidget3: {4: Q_OBJECT5: public:
6: explicit TransDialog(QWidget *parent = 0);
7: void paintEvent(QPaintEvent *event) ;
8: private:
9: QPixmap m_Pixmap;10: };11:
cpp文件:
1: #include "transdialog.h"
2: #include <QBitmap>3: #include <QPalette>4: #include <QPaintEvent>5:6: TransDialog::TransDialog(QWidget *parent) :7: QWidget(parent,Qt::FramelessWindowHint)8: {9: //让程序背景半透明
10: this->setWindowOpacity(0.5);
11: //加载一幅有部分区域是透明的图片作为程序的界面
12: m_Pixmap.load("hudie.png");
13: resize(640, 480);14: //保持图片跟界面一样大小
15: m_Pixmap = m_Pixmap.scaled(size());16: //设置自动填充
17: setAutoFillBackground(true);
18:19: //不规则窗口的关键,将图片透明的地方设为穿透
20: setMask( m_Pixmap.mask() );21:22: }23:24: void TransDialog::paintEvent(QPaintEvent *event)
25: {26: //绘制背景图片
27: QPalette bgPalette = this->palette();
28: bgPalette.setBrush(QPalette::Background,m_Pixmap);29: this->setPalette(bgPalette);
30: }