qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透

窗口置顶
qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)
kde 里是 KWindowSystem::setState(winId(), NET::KeepAbove)
这样的置顶窗口不会处于全屏窗口的上方,如果需要真正的置顶,setWindowFlags(Qt::X11BypassWindowManagerHint) 可无视这个规则,但这样不会出现任务栏等,kimtoy 的预编辑窗口就是真正的置顶。

真透明

qt 里是 setAttribute(Qt::WA_TranslucentBackground, true)
真透明需要窗口管理器开启混成,否则透明区域将显示为黑色,这时候可以用非矩形来抠去黑色区域。


背景模糊

kde 扩展 Plasma::WindowEffects::enableBlurBehind(winId(), true, /*这里有个参数指定模糊区域*/)
背景模糊需要窗口管理器开启模糊特效,否则无效。kde kwin 的扩展标识,其它桌面上可能没有模糊效果。


非矩形

qt 里是 setMask(/*这里有个参数指定非矩形区域*/)
没有开桌面混成的时候达到没有黑色区域的效果,形状复杂的话相当消耗资源,使用非透明区域作为形状会产生边缘锯齿。

跳过任务栏分页器
kde 里是 KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager)
这样的窗口经过隐藏再显示出来时,如果程序其它对话框弹出,原先设置跳过任务栏分页器的窗口将失效。解决办法是实现 showEvent(QShowEvent* event) 中再次调用一下。kimtoy 的状态栏窗口在弹出关于kimtoy对话框或者设置对话框后就不能跳过任务栏分页器的,即通过此法解决,krunner也是这样的。

无边框
qt 里是 setWindowFlags(Qt::FramelessWindowHint)
实际上只要能获得焦点,ctrl+f3 打开kwin的菜单还能还原的哦,比如krunner,很多plasmiod。。


无焦点点击

qt 里是 setAttribute(Qt::WA_X11DoNotAcceptFocus, true)
无焦点点击的意思是用鼠标在窗口上进行操作而不将键盘输入的焦点转移到窗口中。kimtoy 的状态栏窗口就是这样子,鼠标可以切换功能,但输入法的各个状态依然是输入焦点窗口而非 kimtoy 状态栏窗口的,这样可实现真正的 Dock。

焦点穿透
很遗憾qt没有这个函数只好直接用x11shape的 XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput, 0, 0, NULL, 0, ShapeSet, YXBanded)

焦点穿透的意思是所有鼠标键盘操作全部会穿透窗口到下方窗口。有个 Qt::WA_TransparentForMouseEvents 可以对子部件实现,而窗口本身不行。kimtoy 没用到这个,不过很多 osd 桌面歌词程序经常用,网上找了下只有 gdk 的实现,于是就把 qt 的写在这里啦。

本文章转自http://blog.csdn.net/outmanlee/article/details/7451097

QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透的更多相关文章

  1. QT 窗口置顶功能

    Qt中,保持窗口置顶的设置为: Qt::WindowFlags m_flags = windowFlags(); setWindowFlags(m_flags | Qt::WindowStaysOnT ...

  2. 解析Delphi 窗口置顶,及非主窗口置顶

    方法一: procedure TForm1.Button2Click(Sender: TObject);begin Form2.Show; Application.NormalizeTopMosts; ...

  3. 窗口置顶 - 仿TopWind

    前置学习:低级鼠标hook,获得鼠标状态. 这个在原来获得鼠标状态的基础上,加上一个事件处理即可. TopWind就是一个可以置顶窗口的文件,避免复制粘贴的时候的来回切换(大窗口与小窗口),算是一个实 ...

  4. ahk之路:利用ahk在window7下实现窗口置顶

    操作系统:win7 64位 ahk版本:autohotkey_L1.1.24.03 今天安装了AutoHotkey_1.1.24.03.SciTE.PuloversMacroCreator,重新开始我 ...

  5. 将窗口置顶的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow

    将窗口置顶的方法:SetWindowPos.AttachThreadInput.SwitchToThisWindow [转]http://hi.baidu.com/neil_danky/item/f9 ...

  6. vc 使窗口置顶 在最前面

    bool SetWindowTop(CWnd* pWnd){ if(!pWnd) {   return false; } if(pWnd->GetExStyle()&WS_EX_TOPM ...

  7. win应用只允许单个实例运行,并将已运行实例窗口置顶

    关键词:windows,c++,桌面应用,单个实例,窗口置顶 目标:1.判断本程序是否已有一个实例在运行.2.若有,则激活已在运行的实例(将其窗口置顶),并退出当前运行. 1.使用semaphore来 ...

  8. 取消VS2017窗口置顶

    今天打开VS2017,莫名其妙窗口置顶了,百度了一下如何取消窗口置顶,就是Ctrl+Alt+Esc组合键,就可以取消窗口置顶了,至于到底怎么会突然置顶的我也不知道emmm... /********** ...

  9. FMX 窗口置顶 或置底 xe10

    FMX 窗口置顶  或置底 xe10 Popup 置底 StayOnTop 置顶

随机推荐

  1. 交换右ctrl和capslock

    记得几年前开始使用Emacs,因为使用ctrl键太频繁了,所以上网查了下解决方案,看到这篇文章 .把capslock和左ctrl交换,简直要泪流满面啊!立马照着做,从此在所有使用的电脑上都对此进行了设 ...

  2. hdoj 1251 统计难题(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路分析:该问题要求求出以某个字符串为前缀的单词数目,通过使用字典树,在字典树中添加count记 ...

  3. The document "ViewController.xib" could not be opened. Could not read archive.

    The document "ViewController.xib" could not be opened. Could not read archive. Please use ...

  4. 在js中获取query string 以及重写URL的函数

    函数用途:如标题.1. 从URL中解析出參数,2.重写URL中的參数值 例如以下代码所看到的.包括了測试.能够直接copy到浏览器中,输入測试地址:localhost:xxx?a=1&b=2& ...

  5. Android实现应用下载并自动安装apk包

    安装: ? 1 2 3 4 5 String str = "/CanavaCancel.apk"; String fileName = Environment.getExterna ...

  6. 由浅到深讲解Mybatis

    Mybatis的简介 什么是Mybatis? Mybatis是支持定制化SQL,存储过程以及高级映射的持久化框架.Mybatis避免了几乎所有的JDBC代码和 手动设置获取结果集.Mybatis可以对 ...

  7. HDU 1045(质因数分解)

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description Tomor ...

  8. 南阳师范学院ACM官方博客使用说明

    登录之后跳到如下页面: 点击博客进入如下页面: 这里每个人都有一个专栏,大家可以把自己写得博客放到自己的专栏下,同时也可以查看其他人写的博客,相互交流! 在发表博客的时候,选择个人分类中自己的专栏即可 ...

  9. 基于Bootstrap的步骤引导html页面

    美工设计了一个下一步下一步的引导效果界面,百度谷歌了很久没有找到合适的控件,就想着能不能借助Bootstrap的标签页修改下,实现后的效果如下. 实现思路是先PS三张小图片,作为步骤之间引导的箭头,如 ...

  10. ipa制作

    打包ipa步骤: 项目名称 -> edit scheme -> 如图选择release 点击close后,选择真机 然后command+b编译程序,右击app,show in Finder ...