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实现不规则窗体和透明窗体

不规则窗体的实现有两种方式: 一种是设置窗体的掩码图像; 另一种是设置窗体背景透明,然后重写其绘图函数,将背景图绘制上去。   第一种方式: 首先要准备两张图像,一张是要...
  • qustdjx
  • qustdjx
  • 2014年07月18日 09:25
  • 1242

Qt学习笔记之窗体基类说明

窗体基类说明 QMainWindow、QWidget、QDialog,三个基类的区别说明如下。 1、 QMainWindow QMainWindow 类提供一个有菜单条、锚接窗口(例如工具条)和...
  • Fouse_
  • Fouse_
  • 2017年08月07日 20:03
  • 111

QT 常用部件 之窗体篇 widget 属性(一)

这里介绍的是widget 窗体的属性 最完整的属性请查看qt自带的帮助文档,这里之拿了一部分做说明 窗体属性: object name:物件名称 qwidget:enabl...

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

简述在自定义无边框、标题栏的界面中,需要自己实现最小化、最大化、关闭、窗体背景等功能。最小化、最大化、关闭等按钮设计及功能比较简单,这里就不多做介绍。今天主要介绍一下绘制背景的问题,主要实现自适应屏幕...

QT 常用部件 之窗体篇 widget 属性

QT 常用部件 之窗体篇 widget 属性(一)

Qt 透明窗体实现

一. 背景刷成黑色,前景色设为白色。 方法一、paltette方式,经测试,该方法不会影响到其他控件,推荐使用 QPalette bgpal = palette(); bgpal.setColor ...

Qt 透明窗体,圆角

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

教你如何用Qt做透明的窗体

教你如何用Qt做透明的窗体,setMask,Qt,Opacity, 管理提醒: 本帖被 XChinux 设置为精华(2010-09-10) // In this fun...

Qt 无边框、透明、可移动的个性窗体

【如果其父窗口为空的话,透明的地方会成为黑块。】 很多朋友都问透明的效果怎么做,为什么自己做的无边框窗体不可移动,一个个回答的很累,干脆写出来分享下好了,我只用代码说话。 //main.cpp i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt之窗体透明
举报原因:
原因补充:

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