码迷,mamicode.com
首页 > Windows程序 > 详细

Qt绘制异形窗体

时间:2015-04-15 00:44:53      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

异形窗体即不规则窗体,一般采用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: }

Qt绘制异形窗体

标签:

原文地址:http://www.cnblogs.com/lingluotianya/p/4427285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!