Qt绘制异形窗体

异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步:

1、设置遮罩区
2、绘制图片

 

使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话少说,以实现绘制一只蝴蝶(蝴蝶为半透明)为例,效果如下:

image

头文件:

  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: }

你可能感兴趣的:(qt)