异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步:
1、设置遮罩区
2、绘制图片
使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话少说,以实现绘制一只蝴蝶(蝴蝶为半透明)为例,效果如下:
头文件:
1: #include <QWidget>
2: class TransDialog : public QWidget
3: {
4: Q_OBJECT
5: 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: }