程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Qt繪制異形窗體,qt繪制異形

Qt繪制異形窗體,qt繪制異形

編輯:C++入門知識

Qt繪制異形窗體,qt繪制異形


   

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved