zoukankan      html  css  js  c++  java
  • Qt之窗体透明

    简述

    关于窗体透明,经常遇到,下面我们针对常用的透明效果进行讲解:

    1. 全透明(主窗体、子窗体均透明)
    2. 主窗体透明(子窗体不透明)
    3. 子窗体透明(主窗体不透明)

    正常状态

    正常状态下,效果如下:

    这里写图片描述

    全透明

    这里,我们可以透过整个窗体观看到桌面的背景。

    效果

    这里写图片描述

    源码

    设置窗口的透明度,如下:

    setWindowOpacity(0.5);

    透明度取值范围:0.0(全透明) - 1.0(不透明),默认值为1.0。

    主窗体透明

    这里,我们可以透过窗体的一部分观看到桌面的背景。

    效果

    这里写图片描述

    源码

    使用paintEvent进行背景绘制

    主窗体采用背景色:

    void MainWindow::paintEvent(QPaintEvent *event)
    {
        Q_UNUSED(event);
    
        QPainter painter(this);
    
        // QColor最后一个参数80代表alpha通道,一般用作透明度
        painter.fillRect(rect(), QColor(50, 50, 50, 80));
    }

    主窗体采用背景图片:

    首先,设置背景透明:

    setAttribute(Qt::WA_TranslucentBackground, true);

    然后,绘制窗体背景:

    void QZXingWidget::paintEvent(QPaintEvent *event)
    {
        QPixmap covertPixmap(":/Images/background");
        QPixmap pixmap(covertPixmap.width(), covertPixmap.height());
        pixmap.fill(Qt::transparent); 
        QPainter painter(&pixmap);
        QPoint start_point(0, 0);
        QPoint end_point(0, pixmap.height());
    
        //QLinearGradient进行渐变色设置
        QLinearGradient gradient(start_point, end_point);
        gradient.setColorAt(0, QColor(255, 255, 255, 100));
        gradient.setColorAt(0.5, QColor(255, 255, 255, 150));
        gradient.setColorAt(1, QColor(255, 255, 255, 255));
        painter.fillRect(rect(), QBrush(gradient));
        painter.setCompositionMode(QPainter::CompositionMode_SourceIn); 
        painter.drawPixmap(0, 0, covertPixmap);
        painter.end();
    
        QPainter painter2(this);
        painter2.drawPixmap(0, 0, pixmap);
    }

    子窗体透明

    这部分在博客中已经分享过了,这里就不再过多阐述,请参考:Qt之透明提示框

    更多参考

  • 相关阅读:
    php知识点
    cdnbest里站点域名不同步到节点,报400错误的一般原因
    linux删除历史操作命令
    linux 查看进程启动路径
    Linux中systemctl命令详细介绍
    申请ssl证书报提示caa提示
    开启swap交换分区
    mysql里max_allowed_packet的作用
    抓包工具tcpdump用法说明--1
    echo和print的区别
  • 原文地址:https://www.cnblogs.com/itrena/p/5938279.html
Copyright © 2011-2022 走看看