首页 > Windows开发 > 详细

Qt之窗体透明

时间:2016-07-06 15:01:46      阅读:196      评论:0      收藏:0      [点我收藏+]

简述

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

  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之透明提示框

更多参考

Qt之窗体透明

原文:http://blog.csdn.net/liang19890820/article/details/51837342

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!