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。
ps:加一句 w.setAttribute(Qt::WA_OpaquePaintEvent,true); 窗口就能够一直保持这个效果了。即这个方案可行。
pps:此方案在XP也是黑色底块。
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运行不正常。窗口成为黑色背景块。只能是颜色半透明了。
还有就是图标会被盖住。只能把w.setAttribute(Qt::WA_TranslucentBackground, true );注释掉,有半透明颜色,无法看到桌面。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22893636/viewspace-663017/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22893636/viewspace-663017/

QT 半透明窗口 面板 示例 做了一个浮动的半透明窗体面板,窗体背景半透明,不影响子控件透明度。可以修改窗体背景的颜色和透明度,实现了鼠标按住移动窗体,拖动边缘调整窗体大小和鼠标滚轮修改透明度,总结了使用方式并且添加了必要注释 立即下载

相关推荐

避开这些坑!智鼎MAP性格测试高分指南(附互联网/国企/外企答题模板)

本文深入解析智鼎MAP职业性格测试的核心逻辑与常见陷阱,提供针对互联网、国企、外企三大行业的差异化答题策略与实战模板。帮助求职者理解测试本质,避开追求完美人设、忽视程度副词等心理陷阱,塑造与目标岗位高度匹配的职业画像,从而在招聘关键环节脱颖而出。

rainy的博客 979

Qt如何实现窗口半透明

记录Qt窗口透明的相关设置方法

wangshuping18的博客 1998

【保姆级教程/代码】GNSS反演大气可降水量(Precipitable Water Vapor, PWV)

GPS精密单点定位(PPP)是一种采用精密卫星星历和卫星钟差进行非差单点定位的方法,在观测过程中采用双频载波相位观测法以确保高精度定位精度。本文利用PPP技术来求解天顶对流层延迟(zenith tropospheric delay,ZTD)。ZTD由湿延迟(ZWD)和干延迟(ZHD)组成,其中占比90%的ZHD与地面测站高程、大气压和测站纬度等参数有良好的相关性,可以通过Saastamoinen模型精确求出;

weixin_43910227的博客 2922

qt实现窗口背景透明

方法一: MainWindow w; //方法一:主界面透明,界面里面的控件不透明 w.setWindowFlags(Qt::FramelessWindowHint);//设置无窗口框架边界 w.setAttribute(Qt::WA_TranslucentBackground);//设置背景透明 w.show(); 编辑界面: 运行效果: 方法二: w.setWindowOpacity(0.5);//直接设置整个窗口(包含里面的控件)0完全透.

weixin_43935474的博客 7388

【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南

海康威视MVS机器视觉软件安装与使用指南:首先从官网下载MVS 4.3.0安装包,默认设置完成安装。安装后可在Development目录查看示例代码、开发文档及头文件,支持C++/C#/Python等多语言开发。软件内置虚拟相机功能,通过工具菜单添加虚拟设备后即可模拟真实相机操作,支持中英文界面切换、参数调节(曝光/增益等)及图像采集功能。虚拟相机虽仅能显示预设图像,但完整保留了参数调节功能,适合开发者进行功能测试。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3303

破解拼多多网页字体加密的Python实现(静态)

爬取或者复制粘贴出来发现数字不是6372,而是这样的一个东西 ""从上图我们可以看出数字是一行的空白,后面被浏览器渲染后才展现的数字。我们可以用这个代码查看十六位进制对应的十进制,为什么要看十进制呢?​,而字体文件中的字符映射关系(cmap)也是以十进制存储的。我们搜索这个属性我们可以看到第一个这样的属性有一个URL,这个就是解密的字体包。然后我们构造一个这样的映射字典 key就是对应的十进制,后面的值就是对应的数字。然后我们需要封装一个函数,将加密文字和映射字典传入,返回解密后的数字。

weixin_64179111的博客 3538

Qt 窗口嵌入桌面 窗口 放在桌面

1.效果 当按下Win+D是,桌面干净了,只剩下了这个贴在桌面的。。。 2.用法 #ifdef Q_OS_WIN #include "CWindows.h" #endif 伪代码{ QLabel *pLabel = new QLabel(); pLabel->setText("hello desktop"); pLabel->setGeometry(20,20,200,30); setParentDesktop(pLabel); } 2.代码 头文件 #ifndef CWIN

我是唐 2476

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解

本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。

weixin_30379531的博客 408

Linux下Qt窗口半透明,Qt实现嵌入桌面的半透明窗口 good

一、将Qt窗口嵌入到桌面中。声明一个最简单的类:classDialog :publicQDialog{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();}函数实现:Dialog::Dialog(QWidget *parent): QDialog(parent){//...

weixin_42501463的博客 1589

AI驱动的iOS逆向工程自动化:14阶段工作流与Ghidra集成实践

逆向工程是软件安全分析的核心技术,通过反汇编、调试等手段解析程序内部逻辑与数据流。其原理在于将编译后的二进制代码还原为可理解的逻辑结构,从而发现潜在漏洞或理解软件行为。在移动安全领域,iOS逆向工程具有重要技术价值,能够用于安全审计、漏洞挖掘与恶意软件分析。传统iOS逆向依赖ipsw、class-dump、Frida等工具链组合,存在学习曲线陡峭与流程碎片化问题。本文介绍的ios-reverse-skills项目创新性地将14阶段逆向工程方法论封装为AI可调用的标准化脚本集,通过Ghidra脚本实现Swif

weixin_27268733的博客 430

【机器学习】推理时计算优化——思维链(Chain-of-Thought)与慢思考范式 第一章:基础理论与认知框架 第二章:计算优化技术与前沿方法

过程监督在数学推理中展现出显著优势,因其能够定位错误发生的具体步骤,而非仅在最终答案处提供稀疏反馈。然而,高质量过程标注的获取成本高昂,这催生了基于自动验证器的近似方法。

VectorShift的博客 71

Qt实现半透明窗口 嵌入桌面

本文介绍的是Qt实现半透明窗口 嵌入桌面,窗口的一个特效,主要是有alpha值的颜色填充背景,最终的dialog实现看内容。 一、将Qt窗口嵌入到桌面中。 声明一个最简单的类: class Dialog : public QDialog   {           Q_OBJECT  public :           Dialog(QWidget *parent = 0);

毅修的专栏 2603

Neo4j:入门基础(二)之导入CSV文件

导入CSV文件的方式  主要的两种方式如下:   1、使用 Cypher 命令LOAD CSV,这种方式可以处理中小型数据(可达10 million条记录)   2、使用批量导入工具neo4j-admin ,用来直接导入大数据集 三、上述方式具体导入过程   1、Cypher 命令LOAD CSV 参数 1、USING PERIODIC COMMIT 300 使用批量提交,每满300条提交一次,防止内存溢出 2、WITH HEADERS 从文件中读取第一行作为参数名,...

Puzzle的博客 3万+

Qt实现嵌入桌面的半透明窗口 [此博文包含图片]

<br />这儿用上了前面一文提到的函数findDesktopIconWnd()。<br /> 见: http://mypyg.blog.51cto.com/820446/263349<br /><br /> 一、将Qt窗口嵌入到桌面中。<br /> 声明一个最简单的类:class Dialog : public QDialog<br /> {<br />         Q_OBJECT<br /><br />public :<br />         Dialog(QWidget

王以山的专栏 2498

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

qdialog 圆角_Qt 的一些心得(背景设置,圆角,半透明)

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

weixin_39613433的博客 1945

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

【如果其父窗口为空的话,透明的地方会成为黑块。】 很多朋友都问透明的效果怎么做,为什么自己做的无边框窗体不可移动,一个个回答的很累,干脆写出来分享下好了,我只用代码说话。 //main.cpp int main(int argc, char *argv[]) { QApplication::setStyle("cleanlooks"); QApplication a(argc,

小青年儿 9719

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

QT 5.10 嵌入桌面以及 真半透明实现,win7&win10

首先嵌入桌面 添加依赖: LIBS += -luser32 其次main.cpp中添加定义及引用 #include <Windows.h> static BOOL enumUserWindowsCB(HWND hwnd, LPARAM lParam) { long wflags = GetWindowLong(hwnd, GWL_STYLE); if (!(wf...

3127

qwidget美化_Qt美化界面的心得整理

最近在美化QT,一直对纯代码编写和美化界面能力拙急。网上搜了很多很多资料,但由于那个庞大的工程还没完成,先将网上的资料整理一下,有一些没用到的,留着以后看。等我的界面美化完之后再po上来~/**********************************转载分割线**********************************/Qt 的一些心得本文来自:http://blog.csdn.n...

weixin_42117224的博客 2455

qt android png透明,QT透明的经验汇编

最近在美化QT,一直对纯代码编写和美化界面能力拙急。网上搜了很多很多资料,但由于那个庞大的工程还没完成,先将网上的资料整理一下,有一些没用到的,留着以后看。等我的界面美化完之后再po上来~/**********************************转载分割线**********************************/Qt 的一些心得本文来自:http://blog.csdn.n...

weixin_34404528的博客 526

把一个半透明窗口嵌入Windows桌面并转发系统鼠标消息到窗口

当窗口嵌入桌面时,Qt的事件处理机制是接不到鼠标消息的,你只能在onEmbed....方法中手动处理。现在这个窗口的所有消息都会被转发到 WNDPROC oldProc;把窗口从嵌入状态恢复为非嵌入状态,最简单的办法就是把这个窗口关了,重新创建一个。当窗口未嵌入桌面时,不应该注册输入设备。窗口在桌面背景前面,在桌面图标后面。

liulun的博客 332

QT半透明窗口面板示例资源:打造互动性极强的用户界面

QT半透明窗口面板示例资源:打造互动性极强的用户界面 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代软件开发中,用户界面的美观性与交互性越来越受到重视,QT半透明窗口面板示例资源应运而生。这个开源项目致力于帮助开发者快速搭建具有半透明背景的浮动窗体,不仅提高了用户的视觉体验,还增强了操作的流畅性。 项目技术分析 QT作为跨平台的应用开发框架,广泛应用于桌面、嵌入...

gitblog_06768的博客 897
上一篇: Qt Creator快捷键
下一篇: 第一个Qt Quick程序(QML程序)
cppioq7518
博客等级 码龄10年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值