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

更多参考

时间: 2024-09-11 05:55:45

Qt之窗体透明的相关文章

winform 设置窗体透明 但鼠标不穿透

问题描述 我设置Form的this.TransparencyKey=this.BackColor;但是窗体透明后,我能操作窗体后面的内容!我不需要穿透效果,我需要点击窗体触发事件等!求解惑,如何让窗体透明后,不穿透,谢谢 解决方案 解决方案二:自己顶自己a解决方案三:不知道你要干嘛,弄一道无形的墙么?完全透明了就是相当于没有了,你可以把透明度设置为1%解决方案四:引用2楼layershow的回复: 不知道你要干嘛,弄一道无形的墙么?完全透明了就是相当于没有了,你可以把透明度设置为1% 透明度为1

winform mdi子窗体透明

问题描述 之前搞java的,现在需要弄个C#,遇到个问题:做个左侧树形导航,右侧展示内容.现在右边展示mdi子窗体时会把主窗体背景遮住,求高手怎么能让mdi子窗体透明??? 解决方案 解决方案二: 解决方案三:this.Opacity=50; 窗体的不透明属性,可以再属性设计器里面设置也可以在代码中动态修改.解决方案四:不要坑我哦,this.Opacit这属性值范围不是0到1吗?而且这个对于子窗体无效,我试过了...解决方案五:这个问题我以前也特别想知道,希望你找到答案吧解决方案六:引用3楼jr

qt quick-qml 窗体怎样最小化?

问题描述 qml 窗体怎样最小化? 请问为什么 我自定义qml 窗口的最小化无效呢? 使用QQuickView 的showMinimized()方法 窗体是无边框和标题栏的 平台是osx 10.9 求大神解答 解决方案 窗体是与边框和标题栏,在 windows 平台下是不可以最小化和移动的. 估计 QT 下也是一样的,你先设置窗体有边框和标题栏再试试最小化是不是就可以了.

Qt之窗体拖拽、自适应分辨率、自适应大小

简述 在自定义无边框.标题栏的界面中,需要自己实现最小化.最大化.关闭.窗体背景等功能.最小化.最大化.关闭等按钮设计及功能比较简单,这里就不多做介绍.今天主要介绍一下绘制背景的问题,主要实现自适应屏幕分辨率. 简述 实现 自适应方案 效果 源码 实现 先看一下UI设计的图(大小:1298*786): 自适应方案 如何自适应屏幕分辨率呢?下面是常用的一些方案: 为每个分辨率单独做一张图 将图片切分为九宫格形 在原图基础上进行实现 下面,我们分别对它们一一进行分析: 常用的分辨率很多,800*60

SWT 设置窗体透明和最上

//设置最上  OS.SetWindowPos(shell.handle, OS.HWND_TOPMOST, 0, 10, 300, 300,    SWT.NULL); //设置透明窗体  OS.SetWindowLong(shell.handle, OS.GWL_EXSTYLE, OS.GetWindowLong(    shell.handle, OS.GWL_EXSTYLE) ^ 0x80000);   TCHAR lpLibFileName = new TCHAR(0, "User32

《Qt 实战一二三》

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队. 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们要立足眼下,把第一站放在地球,"<Qt 实战一二三>&quo

MFC绘制不规则窗体的方法_C 语言

本文实例讲述了MFC 绘制不规则窗体的方法.分享给大家供大家参考.具体分析如下: 实现过程: 1.首先创建基于DLG的MFC应用程序,命名为:tryBGDlg,并将DLG的属性设置为:Title Bar :False ,其它设置不变 2.制作两幅图像,其中的一幅黑白图像,是根据播放器外观来制作的,其中白色区域是要保留的最终在桌面上显示的区域.将这两幅图像添加到工程中,第一个ID号设置为IDB_INTERFACE,第二个ID号设置为:IDB_MASK 3.在CtryBGDlg类中添加一个在函数:

Qt界面设计1

最近刚接触Qt 对于QML做界面感觉已经很轻松了,但是想尝试一下GUI..准备做一个理财的小软件 ....慢慢记录我的一点一滴的学习经历. 自己封装界面UI 遇到了好多新手级别的问题=_=!!!    1.界面透明 方法好多设置pattle 等等这里我就用这一个 ydw.setWindowFlags(Qt::FramelessWindowHint);   //在设置  Qt::WA_TranslucentBackground 属性 之前必须去掉窗体的标题栏 ydw.setAttribute(Qt

如何在MDI子窗体中使用TransparencyKey属性

问题描述 如何在MDI子窗体中使用TransparencyKey属性如果窗体不是MDI子窗体,则可以通过设置TransparencyKey属性使得窗体透明.但如果窗体时MDI子窗体,这个属性就无效了.请教有什么办法使得MDI子窗体透明或其TransparencyKey属性生效. 解决方案 解决方案二: 解决方案三:感觉是来踢馆的解决方案四:是不可以的,让MDI子窗体再穿透MDI主窗体实在有点为难windows了不知为何一定要MDI呢?解决方案五:引用3楼xuzuning的回复: 是不可以的,让M