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. 远程管理服务SSHD

    安装SSH yum install openssh

  2. Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

    2016-07-18 16:08:20 [main:53] - [WARN] Exception encountered during context initialization - cancell ...

  3. Flex4 设置combobox选项不可编辑

    近日做数据的增删改查,使用的flex4的ComboBox控件---> flex4中ComboBox其实就是TextInput的叠加 flex3中ComboBox其实就是Label的叠加 开始是使 ...

  4. SVNserver的本地搭建和使用

    Subversion是优秀的版本号控制工具,其具体的的长处和具体介绍,这里就不再多说. 首先来下载和搭建SVNserver. 如今Subversion已经迁移到apache站点上了,下载地址: htt ...

  5. C# Best Practices - Accessing and Using Classes

    References and Using Do: Take care when defining references References must be one way (or circular ...

  6. java volatile关键字的理解

    转载:http://shmilyaw-hotmail-com.iteye.com/blog/1672779 一个多线程的示例引发的问题 在讨论这个关键字之前先看一个多线程的示例代码: public c ...

  7. debian下samba配置

    debian下samba配置  http://blog.chinaunix.net/uid-2282111-id-2113216.html 服务器端配置过程:1. apt-get install sa ...

  8. HDU1004题解分析(字符串处理)

    这道题是从上个星期开始做的,看到题时觉得似曾相似,好像做过,理了一下思路敲完代码又不对,后来发现是数组用错了,之后又重新想了数组和比较用法,昨天改了一个多小时,后来样例输出全部正确,所有情况都考虑到了 ...

  9. mina教程

    关于mina介绍这里不做阐述..... 我们先做一个关于mina的helloworld 首先先下载mina包:http://mina.apache.org/ (如果你已经下载,此步骤忽略) 下载下来以 ...

  10. Android 开发技巧

    1, ActionBar.setTitle() 的参数是 CharSequence,可以用SpannableString的,颜色字形随你