異形窗體即不規則窗體,一般采用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: }