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-10-13 20:50:22

Qt之窗体透明的相关文章

Qt之窗体透明 (三种不同的方法和效果)

关于窗体透明,经常遇到,网上的资料倒不少,也不知道写的时候是否验证过,很多都不正确...今天就在此一一阐述! 以下各效果是利用以前写过的一个小程序作为示例进行讲解!(代码过多,贴主要部分) 正常状态 效果如下: 这部分代码就不贴了(主要讨论透明效果). 一.全透明 setWindowOpacity(0.5); 取值范围为:0.0 - 1.0,默认值为1.0,全透明为0.0,不透明则为1.0. 效果如下: 显而易见,窗体及其子窗体全部透明! 二.主窗体透明(子窗体不透明) 1.主窗体采用背景色 s

QT主窗体半透明实现

QT主窗体透明实现: 1)添加setWindowFlags(windowFlags() | Qt::FramelessWindowHint); 2)添加setAttribute(Qt::WA_TranslucentBackground, true); 3)重写paintEvent事件 备注: 三者缺一不可 1)当没有设置Qt::WA_TranslucentBackground属性为true时,会发现没有半透明透明效果. 2)当窗体属性没有设置无边框属性,也就是Qt::FramelessWindo

设置窗体透明C#代码

上个示例是C#调用windows api 在原来代码上加入窗体透明,控件不透明代码: 1 using System; 2 using System.Runtime.InteropServices; 3 using System.Windows.Forms; 4 5 namespace HoverTreeWinForm 6 { 7 public partial class FormHewenqi : Form 8 { 9 10 /// <summary> 11 /// 使窗体透明 by 何问起

透明窗体透明窗体 控件正常显示

//TransparentFrm透明窗体透明窗体 控件正常显示 {以图片的形状作为窗体形态}{使窗体透明 透明的只剩下个控件} // 调用 setFormTransParent(Form1); procedure setFormTransParent(Form:TForm); begin Form.BorderStyle:=bsNone; Form.TransparentColor:=True; Form.TransparentColorValue:=20; Form.Color:=Form.T

Qt 设置按钮透明、图标、移动到按钮和状态栏提示等各种属性

QPushButton *leftToRightBtn = new QPushButton;     leftToRightBtn->setToolTip(tr("Transfer File(s) from Left to Right"));     leftToRightBtn->setFlat(true);     leftToRightBtn->setIcon(QIcon(":/images/rightarrow.png"));     le

Qt创建窗体的过程

版权声明 本文为原创作品,请尊重作者的劳动成果.转载必须保持文章完整性,并以超链接形式注明原始作者“ tingsking18”和 主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 QT源码解析(二)深入剖析QT元对象系统和信号槽机制 QT源码解析(三)深入剖析QT元对象系统和信号槽机制(续) QT源码解析(四)剖析Qt的事件机制原理 QT源码解析(五)QLibrary跨平台调用动态库的实现 QT源码解析(六)Qt信号槽机制与事件机制的联系

delphi 窗体透明

TransparentColor:=true;    TransparentColorValue:=clFuchsia;    Color:= TransparentColorValue;    BorderStyle:=bsNone; delphi 窗体透明http://hi.baidu.com/duduppp/item/f347df3a16dbb9607c034bd5 来自为知笔记(Wiz) delphi 窗体透明

VC窗体透明而控件不透明以及Static文本背景透明方法

出自http://my.oschina.net/ypimgt/blog/60951 优点:    1.Dialog 窗体完全透明.     2. 窗体上的控件不透明. DC 绘制的图形不透明.     3. 拖动窗体上用 DC 绘制的图形可以移动窗体. 缺点:     1. 窗体设置透明使用是掩码颜色,所以在窗体上用 DC 绘图的过程当中如果采用了和透明掩码颜色相同的颜色将不会显示出来.     2. 如果将 Border 属性设置成了 NONE ,那么想通过响应 WM_NCHITEST 消息来

android 窗体透明的,黑暗度等的设置技巧

设置透明度(这是窗体本身的透明度,非背景) 1 WindowManager.LayoutParams lp=getWindow().getAttributes(); 2 lp.alpha=0.3f; 3 getWindow().setAttributes(lp); alpha在0.0f到1.0f之间.1.0完全不透明,0.0f完全透明 设置黑暗度 1 WindowManager.LayoutParams lp=getWindow().getAttributes(); 2 lp.dimAmount