• 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: }
  • 相关阅读:
    一、Docker前提介绍
    CentOS6.10忘记MySQL8密码的解决办法
    阿里云服务器结合域名解析部署springboot项目到Tomcat
    Javap指令集
    微服务之路(十一)spring cloud stream
    微服务之路(十)spring cloud zuul
    微服务之路(九)spring cloud feign
    微服务之路(八)spring cloud netflix hystrix
    python连接oracle数据库
    单元测试-unittest模块
  • 原文地址:https://www.cnblogs.com/lingluotianya/p/4427285.html
Copyright © 2020-2023  润新知