Qt之窗体透明

转载 2015年11月19日 01:55:56



    新年后的第一篇博客,也不知道该从何写起,接触的知识也不算少,今天就将以前遇到的一些小知识总结一下——关于界面的特效(美观性)!

    关于窗体透明,经常遇到,网上的资料倒不少,也不知道写的时候是否验证过,很多都不正确。。。今天就在此一一阐述!

    以下各效果是利用以前写过的一个小程序作为示例进行讲解!(代码过多,贴主要部分)

正常状态
效果如下:
Qt之窗体透明

    这部分代码就不贴了(主要讨论透明效果)。

一、全透明
    setWindowOpacity(0.5);
    取值范围为:0.0 - 1.0,默认值为1.0,全透明为0.0,不透明则为1.0。

效果如下:
Qt之窗体透明

    显而易见,窗体及其子窗体全部透明!

二、主窗体透明(子窗体不透明)
1、主窗体采用背景色
setAttribute(Qt::WA_TranslucentBackground, true);
void paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.fillRect(this->rect(), QColor(0, 0, 255, 80));  //QColor最后一个参数80代表背景的透明度
}
效果如下:
Qt之窗体透明

    显而易见,主窗体透明而子窗体不透明!

2、主窗体采用背景图片
setAttribute(Qt::WA_TranslucentBackground, true);
void QZXingWidget::paintEvent(QPaintEvent *event)
{
    QPixmap covert_pixmap(":/Images/background");
    QPixmap pixmap(covert_pixmap.width(), covert_pixmap.height());
    pixmap.fill(Qt::transparent); 
    QPainter painter(&pixmap);
    QPoint start_point(0, 0);
    QPoint end_point(0, pixmap.height());
    //QLinearGradient进行渐变色设置
    QLinearGradient linear_gradient(start_point, end_point);
    linear_gradient.setColorAt(0, QColor(255, 255, 255, 100));
    linear_gradient.setColorAt(0.5, QColor(255, 255, 255, 150));
    linear_gradient.setColorAt(1, QColor(255, 255, 255, 255));
    painter.fillRect(this->rect(), QBrush(linear_gradient));
    painter.setCompositionMode(QPainter::CompositionMode_SourceIn); 
    painter.drawPixmap(0, 0, covert_pixmap);
    painter.end();

    QPainter painter2(this);
    painter2.drawPixmap(0, 0, pixmap);
}
效果如下:
Qt之窗体透明

    显而易见,主窗体透明而子窗体不透明!

三、子窗体透明(主窗体不透明)
    这部分我就不过多阐述了,请参考:Qt之透明提示框(模拟QQ).

注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。

8

1

阅读(4099) 评论 (5) 收藏(0) 转载(4)  喜欢 打印举报
已投稿到:
后一篇:Qt之拖放
  • DreamSky2012

    好强大!

    2014-2-12  14:16来自DreamSky2012的评论回复(1)

  • aqtata817

    学习了,不过有个想问的,在继承自QWidget的情况下,可以让子部件也能跟着透明吗?按照现在的在paintEvent事件中处理只能让widget达到透明效果,却不可以影响到子部件透明

QT设置窗体透明

1、设置窗体的背景色  在构造函数里添加代码,需要添加头文件qpalette或qgui  QPalette pal = palette();  pal.setColor(QPalette::Ba...
  • luokehua789789
  • luokehua789789
  • 2017年02月17日 15:53
  • 401

QT窗口透明几种方式

1.窗口整体透明,但是窗体上的控件不透明。    通过设置窗体的背景色来实现,将背景色设置为全透。 QPalette pal = palette();  pal.setColor(Q...
  • DEV_linux
  • DEV_linux
  • 2016年08月11日 15:30
  • 1150

Qt设置窗体的透明度: setWindowOpacity()

Qt中设置窗体透明度的方法。
  • rl529014
  • rl529014
  • 2016年06月04日 15:15
  • 2387

Qt 去掉窗体标题栏、窗体透明、窗体圆角(一)

1.去掉标题栏、窗体透明 setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackgr...
  • believet93
  • believet93
  • 2016年07月14日 18:21
  • 205

利用QML实现透明窗口[qt5]

main.cpp mainwindow.
  • mathgeophysics
  • mathgeophysics
  • 2014年09月21日 03:25
  • 3243

QT 窗体透明

【引用】Qt中设置窗口的透明   Qt |字号 订阅 本文引用自/yl守望/love《Qt中设置窗口的透明》一、将Qt窗口嵌入到桌面中。 声明一个最简单的类: ...
  • liang890319
  • liang890319
  • 2011年11月30日 20:04
  • 8677

[QT编程]QT实现不规则窗体和透明窗体

[QT编程]QT实现不规则窗体和透明窗体 不规则窗体的实现有两种方式: 一种是设置窗体的掩码图像; 另一种是设置窗体背景透明,然后重写其绘图函数,将背景图绘制上去。   第一种方式: ...
  • oMingZi12345678
  • oMingZi12345678
  • 2013年10月18日 16:16
  • 1470

Qt 透明窗体实现

一. 背景刷成黑色,前景色设为白色。 方法一、paltette方式,经测试,该方法不会影响到其他控件,推荐使用 QPalette bgpal = palette(); bgpal.setColo...
  • ACCP_2008123456
  • ACCP_2008123456
  • 2010年07月03日 09:07
  • 3148

Qt开发:无边框异形窗口,透明背景,可移动

很多端游的启动器客户端都是异形窗口,无边框,自绘并重写了最小化、最大化、关闭按钮。本文具体讲一下实现。 步骤: 1,设置窗口透明度、窗口无边框样式、窗口背景透明。 2,准备ps过的带透明...
  • u012234115
  • u012234115
  • 2015年02月13日 00:41
  • 3116

用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)

用Qt可以做出很炫的界面,更多的功能还有待学习^_^! 1、构造函数中需要做的设置: [cpp] view plaincopyprint? t...
  • imxiangzi
  • imxiangzi
  • 2015年12月28日 22:59
  • 1011
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt之窗体透明
举报原因:
原因补充:

(最多只允许输入30个字)