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