【引用】Qt中设置窗口的透明

QT:paintEvent、QPainter、QPaintDevice 在 Qt 编程中,paintEvent 是 QWidget 类中的一个非常重要的虚函数,用于处理绘图事件。当一个 QWidget 或其派生类的实例需要进行重绘操作时,Qt 会自动调用该控件的 paintEvent 函数。 阅读详情

QT 窗体透明

分类: QT美化动态化 802人阅读 评论(3) 收藏 举报

【引用】Qt中设置窗口的透明   Qt

|字号 订阅

本文引用自/yl守望/love 《Qt中设置窗口的透明》 一、将Qt窗口嵌入到桌面中。
声明一个最简单的类:
class  Dialog :  public  QDialog
{
 Q_OBJECT

public :
 Dialog(QWidget *parent = 0);
 ~Dialog();
}
函数实现:
Dialog::Dialog(QWidget *parent) : QDialog(parent)
{
  //创建个LineEdit用来测试焦点
 QLineEdit* le =  new  QLineEdit( this );
}

Dialog::~Dialog()
{
}
主函数:
int  main( int  argc,  char  *argv[])
{
 QApplication a(argc, argv);
 Dialog w;

HWND desktopHwnd = findDesktopIconWnd();
  if (desktopHwnd) SetParent(w.winId(), desktopHwnd);

w.show();
  return  a.exec();
}
运行效果:

有个窗口嵌入了桌面。按win+D组合键可以看到此窗口在桌面上。

二、让窗口全透明:
2.1最容易想到的就是setWindowOpacity()函数了。
w.setWindowOpacity(0.5),运行:结果杯具了,此函数完全无效,因为其父窗口特殊,这个函数内部使用的系统窗口标志不被支持。
2.2
w.setAttribute(Qt::WA_TranslucentBackground, true);
运行效果:

全透明ok。如果其父窗口为空的话,透明的地方会成为黑块。

三、让窗口半透明
3.1w.setAttribute(Qt::WA_TranslucentBackground, true) + 背景调色板
运行效果仍然是全透明,因为TranslucentBackground为true,根本不画背景。
3.2单纯的背景调色板:
QPalette pal = w.palette();
 pal.setColor(QPalette::Background, QColor(100,100,100,50));
 w.setPalette(pal);
 w.setAutoFillBackground( true);
运行效果出现了半透明:

但是还没大功告成,不停点击桌面,再点击这个窗口,会发现这个窗口越来越不透明,直至完全不透明了。不知道是不是qt的bug。
3.3转战paintEvent()
protected:
  void paintEvent(QPaintEvent *);
void Dialog::paintEvent(QPaintEvent *e)
{
 QPainter p( this);
 p.fillRect(rect(), QColor(0,0xff,0,30));
}
用一个带有alpha值的颜色填充背景,运行效果发现颜色确实有alpha值,但是桌面的内容透不过来。
3.4setAttribute(Qt::WA_TranslucentBackground, true) + paintEvent()
运行效果:

得到了设想中的效果。
最终的主函数代码:
int  main( int  argc,  char  *argv[])
{
 QApplication a(argc, argv);
 Dialog w;

HWND desktopHwnd = findDesktopIconWnd();
  if (desktopHwnd) SetParent(w.winId(), desktopHwnd);

w.setAttribute(Qt::WA_TranslucentBackground,  true );

w.show();
  return  a.exec();
}
最终的dialog实现代码:
Dialog::Dialog(QWidget *parent) : QWidget(parent)
{
  //创建个LineEdit用来测试焦点
 QLineEdit* le =  new  QLineEdit( this );
}

Dialog::~Dialog()
{
}

void  Dialog::paintEvent(QPaintEvent *e)
{
 QPainter p( this );
 p.fillRect(rect(), QColor(0,0xff,0,30));
}


PS:
经测试此代码在XP运行不正常。窗口成为黑色背景块。只能是颜色半透明了。
还有就是图标会被盖住。

在QT中自绘控件的方法说明 收藏 
首先给出在QT中进行标题栏自绘的方法(两个网址给出了方法和参考代码)

litterflybug的专栏 ::http://blog.youkuaiyun.com/litterflybug/archive/2009/05/07/4157482.aspx

QT官方FAQ: http://www.qtsoftware.com/developer/faqs/faq.2007-04-25.2011048382

其次,做一点关于在windows平台下将顶级窗口透明化的说明

1.在4.5版本以前,要实现Top level窗口的透明化,需要使用setMask方法,该方法有两个重载,一个是QRegion定义一个区域表明这一区域是要被绘制的区域,在该区域以外的地方是不需要绘制的.第二个重载版本是需要一个QBitmap,这个QBitmap只需要一张单色位图就可以了(另外,一张带有透明效果的PNG图片被读入QPixmap中以后,可以使用函数mask()返回一张与原图对应的单色位图,这很方便实际使用),白色部分表示是不透明要被绘制的区域,黑色部分表示该区域不应该被绘制(能实现透明的效果).

2.4.5版本发行以后,可以设置窗口属性Qt::WA_TranslucentBackground来设定该窗口透明显示,但是有一个问题,就是如果该窗口是个top level窗口,就会有标题栏(title bar), 在windows平台下,如果不把这个标题栏去掉(设置Qt::FramelessWindowHint 标志位就会去掉标题栏),那么将不会是透明效果,而是背景为全黑(我的实验结果是这样)


本文部分来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/dotboy/archive/2009/06/22/4287805.aspx

http://blog.163.com/chengyujie0524@126/blog/static/36569717201161592816551/




1.窗口整体透明,但是窗体上的控件不透明。
   通过设置窗体的背景色来实现,将背景色设置为全透。
QPalette pal = palette(); 
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); 
setPalette(pal);
   试验效果:

 

   窗体标题栏不透明;
   窗体客户区上的控件不透明,QLabel控件只是字显示,控件背景色透明;
   窗体客户区完全透明。
 
   另外从网上看到的方法:
setAttribute(Qt::WA_TranslucentBackground, true);
   试验的结果是类似于上面的方法,www.linuxidc.com但有时候窗体会被一些杂色斑点填充,未找到原因。
 
2.窗口及其上面的控件都半透明:
setWindowOpacity(0.7)
试验效果:窗口及控件都半透明。
 
3.窗口整体不透明,局部透明:
在Paint事件中使用Clear模式绘图。
void TestWindow::paintEvent( QPaintEvent* ) 
{ 
                QPainter p(this); 
                p.setCompositionMode( QPainter::CompositionMode_Clear ); 
                p.fillRect( 10, 10, 300, 300, Qt::SolidPattern ); 
} 
试验效果:绘制区域全透明。如果绘制区域有控件不会影响控件。
 
 
以上实验均是基于Directfb的Qte测试。在Linux下及Windows下效果会略有不同。
比如在Windows下第3个实验,绘制区域就是一个黑窟窿,如果Window本身半透,则是Window下面的内容加上半透效果,不是全透明效果。

用QT实现一个简单的桌面宠物 有时候桌面空空的,或者屏幕空旷了,我们就可以找一点东西来点缀一下,那么桌面宠物是一个不错的选择。 作为一个程序猿,如何实现一个桌面宠物呢? 本文就给大家带来的是如何用qt提供一种思路并写一个简单的桌面宠物。 阅读详情

相关推荐

PyQt5窗口美化实战:3种方法设置背景图片与透明度

本文详细介绍了PyQt5窗口美化的三种实用方法,包括使用setStyleSheet快速设置背景图片与透明度、通过QPalette实现精细控制以及利用资源文件管理美化素材。这些技巧能帮助开发者打造更具吸引力的GUI界面,提升用户体验。文章还提供了代码示例和最佳实践建议,适合PyQt5开发者参考。

weixin_30872499的博客 399

QT关键问题解决之paintevent理解

基础概念: paintEvent(QPaintEvent*)函数是QWidget类中的虚函数,用于ui的绘制,会在多种情况下被其他函数自动调用,比如update()时。 运行时机: 一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因的任意一个都会发生重绘事件: (1)repaint()函数或者update()函数被调用; (2)被隐藏的部件现在被重新显示; (

u012151242的博客 8万+

QT实现的自定义按键精灵

最近沉迷修仙,无法自拔,但是上班又不能玩手机,所以搞了一个PC端的模拟器,然后自己写了一个QT实现的简易版本的按键精灵(只写了鼠标部分,键盘用不到就懒得写了),每天上班之前挂起来。这里分享一下思路和一些碰到的问题。 功能思路 (1)重复鼠标点击过程: 运行方式: 连点:以固定的时间频率按顺序连续点击设置的点位,可以用来当连点器用。 顺时:完全重复录制下来的鼠标点击过程,按设录制...

weixin_43814837的博客 4237

绘图事件paintEvent

绘图事件不用手动调用,通过重写父类虚函数之后会自动调用 绘图基本设置,要有画家——画家类 可以设置画笔,比如画笔颜色和线条样式 可以设置画刷,可以对封闭图形进行涂刷。画刷的颜色,和画刷的样式 设置完画笔之后,不要忘了,要把这个对象传入画家,才能画出美丽的图形 重写父类虚函数,防止写错,加上override //画图事件 void paintEvent(QPaintEvent *event) override; 主要代码,可以实现画线、矩形、椭圆、圆、文字、等基本图案 //绘图事件,也不用手动调用,系统.

weixin_45589030的博客 5808

Qt实现窗口背景透明编程

我们还使用setBrush()函数将矩形的颜色设置为红色,并将透明度设置为128,以实现半透明的效果。这些代码使用了Qt的属性设置函数setAttribute()来使窗口的背景透明,并使用setStyleSheet()函数将窗口的背景样式设置为透明。接下来,我们需要在构造函数中添加一些代码来创建并显示透明的窗口内容。现在,我们已经完成了Qt实现窗口背景透明的编程。你可以编译并运行代码,看到一个具有透明背景的窗口,并在其中显示一个半透明的矩形。在本文中,我将为你提供一个详细的解决方案,并附上相应的源代码。

CyberFlare的博客 291

QDialog的 透明背景 或者其他

QDialog的 透明背景 两种办法可以做到调整背景透明色 //1. this->setWindowFlags (Qt::FramelessWindowHint); //设置窗口无边框 this->setAttribute(Qt::WA_TranslucentBackground); //小部件应该具有半透明的背景 this->setWindowOpacity(1); //设置透明度,默认是1为全不透明,

光顶术士的博客 4115

Qt 透明窗体

最简单的是ps一张背景图片,设置好图片的alpha通道,格式png 然后设置widget的背景,以及属性 Qt::WA_TranslucentBackground,根据文档该属性需要配合 Qt::FramelessWindowHint使用 widget->setAttribute(Qt::WA_TranslucentBackground); widget->setWindow

lslsyqyq的专栏 571

QT QDialog 圆角实现

QDialog 使用css 设置一个对话框为圆角。主要思路是QDialog为一个容器,设置透明后,要对里面的控件进行设置圆角。

Qt 控件设置透明和半透明方法汇总

遇到了好多次控件有需要设置为透明和半透明的情况,每次都是去网上搜一搜,看看别人怎么实现的,浪费了很多时间,故在这里进行一个总结,希望对自己有一个提升。看文字也是看的一脸懵逼,这里通过表格的方式再做进一步的阐述。

漫步者 1万+

基于Transformers库的BERT模型:一个文本情感分类的实例解析

简介 本文来讲述BERT应用的一个例子,采用预训练好的BERT模型来进行演示。BERT的库来源于Transformers,这是一个由PyTorch编写的库,其集成了多个NLP领域SOTA的模型,比如bert、gpt-2、transformer xl等,并且可以自由选择已经预训练好的模型参数,我们可以基于这些参数进行进一步的训练调试。 Part 1: 利用BERT基于特征的方式进行建模 1、任务与数...

蓝天白云梦的csdn博客 2万+

cosi-corr操作详细步骤

cosi-corr是一个可以加载到ENVI的软件包,由加利福尼亚理工学院的François Ayoub,  Sébastien Leprince,  and Lionel Keene开发,并且提供源代码,该软件受到了NSF的资助。软件的主要功能是可以满足各种影响的正射校正和影像配准。 针对下载下来的软件包参考《cosi-corr_guide.pdf》,进行配置使用具体详细过程如下: (本机环境

u013299471的专栏 1万+

QT常用控件2.0,windowOpacity窗口透明度,Cursor光标设置

本文介绍了Qt中窗口透明度和光标设置的实现方法。窗口透明度通过windowOpacity()获取和setWindowOpacity()设置,值为0.0(全透明)到1.0(完全不透明)。还回顾了IEEE 754浮点数标准中阶码E的特殊存储方式(采用中间数修正)。光标设置包括:使用cursor()返回QCursor对象,通过setCursor()设置控件光标,setOverrideCursor()设置全局光标,以及自定义光标图片(支持缩放和位置调整)。文章提供了具体代码示例和效果说明。

深入探究的博客 612

Python结合海康威视工业相机SDK实现高效图像采集与处理

本文详细介绍了如何使用Python结合海康威视工业相机SDK实现高效的图像采集与处理。内容涵盖从环境搭建、SDK核心模块理解,到完整的图像采集流程拆解,包括设备枚举、参数设置、主动取流以及关键的像素格式转换。同时,文章深入探讨了触发模式、参数控制等高级应用,并提供了性能优化建议和可复用的相机操作类封装,帮助开发者快速构建稳定的机器视觉应用。

weixin_29043895的博客 349

QT 窗体透明

【引用】Qt中设置窗口的透明   Qt |字号 订阅 本文引用自/yl守望/love《Qt中设置窗口的透明》一、将Qt窗口嵌入到桌面中。 声明一个最简单的类: class Dialog : public QDialog {  Q_OBJECT public:  Dialog(QWidget *parent = 0);  ~Dialog(

专注的力量 1万+

可乐学习NVMe之一:为什么SSD需要NVMe

1. NVMe SSD 结构简图 整体来看,NVMe SSD可以分为三部分,host端的驱动NVMe Driver、PCIe+NVMe实现的控制器以及NAND Flash+DDR4/DDR5存储介质。 芯片回片后Host侧软件或者驱动开发主要在应用层,通过一些测试工具进行benchmark跑分测试,performance性能分析,latency分析、stress-testing等等: 那么,接下来阐述为什么SSD需要NVMe,并再后续的文章介绍NVMe协议分析,个人针对协议的理解,如果有不当之处,还请各

Lucky 3169

安捷伦示波器实战指南:从基础操作到精准触发

本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。

weixin_30839881的博客 135

QT QWidget设置窗体透明度方法汇总

qwidget 背景透明

Shanks 3010

UE5 GAS 学习笔记 1.2游戏标签

这一节对GameplayTag游戏标签进行详细的讲解。

CloudHuCoding 1928

「Qt Widget中文示例指南」如何实现窗口嵌入?

本文中的示例主要演示如何将非Qt UI元素嵌入到Qt应用程序中,欢迎下载最新版组件体验~

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 2020

开源推荐:5个最实用的AIGC风格迁移项目

随着人工智能技术的飞速发展,AIGC(人工智能生成内容)领域取得了显著的成果。风格迁移作为AIGC中的一个重要分支,旨在将一种图像的风格应用到另一种图像上,创造出具有独特艺术效果的新图像。本文的目的是为读者推荐5个最实用的AIGC风格迁移开源项目,详细介绍这些项目的技术原理、使用方法和应用场景,帮助读者在实际项目中选择合适的工具进行风格迁移。文章的范围涵盖了这些项目的核心概念、算法原理、数学模型、项目实战以及相关的学习资源和未来发展趋势等方面。

AI 原生应用开发的博客 1704

关于YOLOv8的面试题(持续更新中...)

本章将计划更新关于YOLOv8中可能会成为面试题的关键技术点,计划持续更新,可能想到合适的问题我就会整理下更新到本博客中。

ice 4167

Qt::FramelessWindowHint无边框化,移动,大小调整

QT工作笔记壹导读开发环境QT界面无边框方法1方法2引用 导读 最近工作一个项目需要用QT设计一个UI,看了一下目前主流商业化UI,例如扣扣,微信,网易云音乐…结合个人审美(本人非美术专业,但游戏经验丰富,对人机交互界面有个人看法),目前界面风格都是扁平化,纯色调,简单易懂。下面是网易云音乐的效果,本人比较喜欢科技风,类似《使命召唤》和《钢铁侠》风格交互。 系统的标题栏和按钮太传统,想在自定义标题...

gongzhengyu的博客 3万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Qt之窗口动画(下坠、抖动、透明度)

以下内容参考或引用 http://blog.youkuaiyun.com/liang19890820/article/details/51888114 http://blog.youkuaiyun.com/liang19890820 简述 前面几节中我们介绍了关于动画的基本使用,有属性动画、串行动画组、并行动画组。这节我们来实现一些特效,让交互更顺畅。 简述示

Shanks 693

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python GUI设计——PyQt5的学习实践记录day03(PyQt窗口设计基础)

PyQt5窗口运行时默认居中显示在屏幕中,如果想自定义窗口的显示位置,可以根据窗口的大小和屏幕大小来进行设置。在使用setStyleSheet()函数设置窗口背景色之后,窗口中的控件也会继承窗口的背景色,如果想要为控件设置背景图片或图标,需要使用setPixmap()或者setIcon()函数来完成。👆从上图可以看出来,图像没有显示完全,这是因为在使用QPalette对象为窗口设置背景图片时,默认是平铺显示的。在编写代码时,对窗口的任何设置和使用都是通过。QtDesigner-资源添加背景图。

TataDou的博客 2934

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Qt---控件的基本属性

qt中的控件基本属性

CHJBL的博客 1559

用Qt实现圆角窗口

我们可以看到Qt Assistant介绍了两种setMask方法,这里我们采用第一种方法。也就是用QBitmap类实例来实现的方面。第二种方法需要自己绘制区域来实现。两种方法都比较灵活。 在dialog.cpp的构造函数中添加如下代码:     setWindowFlags(Qt::FramelessWindowHint);       //设置关于窗体为圆角     QBitmap bmp(th...

weixin_34200628的博客 1017
上一篇: Qt中添加背景图片的方法(转)
下一篇: QT中几种设置控件的图片背景的方法
lixingworkCCC
博客等级 码龄15年 24粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值