• 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: }
  • 相关阅读:
    JDBI
    Concise: Compressed ’n’ Composable Integer Set
    java 7 新特性
    BIO的简单Demo
    手写一个死锁Demo
    实现一个Cglib代理Demo
    实现一个JDK代理demo
    ClassNotFoundException和 NoClassDefFoundError区别验证
    集合—ArrayList
    Hadoop之Storm基础
  • 原文地址:https://www.cnblogs.com/lingluotianya/p/4427285.html
Copyright © 2020-2023  润新知