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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM