zoukankan      html  css  js  c++  java
  • 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: }
  • 相关阅读:
    jquery中attr和prop的区别
    Server.MapPath用法
    ERP登录(八)
    ViewBag、ViewData和TempData的使用和区别
    ERP权限系统(七)
    C#泛型(三)
    ERP员工入登记查询(六)
    ERP员工入职登记(五)
    MVC学习IIS的不同版本(一)
    兔子谋杀案
  • 原文地址:https://www.cnblogs.com/lingluotianya/p/4427285.html
Copyright © 2011-2022 走看看