Qt 不规则窗体 – 鼠标点击穿透(Linux也可以,有对x11的配置的方法)
2017-01-25 22:59
841 查看
之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:《Qt 不规则窗体 – 无边框半透明》
其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿透。鼠标点击穿透被广泛应用在桌面挂件程序上,目的是为了避免鼠标对窗体进行误操作。
Qt 并没有自带的方法可以实现该功能,所以需要调用系统本身的 API 来实现。这里介绍下 Windows 下和 Linux 下如何实现鼠标点击穿透。
http://ju.outofmemory.cn/entry/162219
其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿透。鼠标点击穿透被广泛应用在桌面挂件程序上,目的是为了避免鼠标对窗体进行误操作。
Qt 并没有自带的方法可以实现该功能,所以需要调用系统本身的 API 来实现。这里介绍下 Windows 下和 Linux 下如何实现鼠标点击穿透。
Windows API : SetWindowLong
SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。函数定义:
LONG WINAPI SetWindowLong( _In_ HWND hWnd, _In_ int nIndex, _In_ LONG dwNewLong );
头文件:
#include<Winuser.h>
代码示例:
SetWindowLong((HWND)winId(), GWL_EXSTYLE, GetWindowLong((HWND)winId(), GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED);
Linux X11 API : XShapeCombineRectangles
在 Linux/Unix 中,需要用到 X11 库函数:XShapeCombineRectangles。函数定义:
void XShapeCombineRectangles ( Display *dpy, XID dest, int destKind, int xOff, int yOff, XRectangle *rects, int n_rects, int op, int ordering);
头文件:
#include <X11/extensions/shape.h>
代码示例:以 Linux 下 Qt 中使用为例
//头文件 #include <X11/extensions/shape.h> #include <QtX11Extras/QX11Info> //函数调用 XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput,0,0, NULL, 0, ShapeSet, YXBanded); //.pro文件中添加 QT += x11extras LIBS += -lX11 -lXext
http://ju.outofmemory.cn/entry/162219
相关文章推荐
- Linux+QT+OpenCv摄像头调试心得(2)----点击退出关闭窗体,提示“程序异常终止”
- Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)
- Linux配置VNC的远程连接 登录无提示和开机就可以远程的方法
- qt 鼠标在窗体外点击 窗体自动关闭
- 鼠标点击可拖动窗体方法
- Qt 中实现在控件中点击鼠标,就在鼠标点击处加载图片的方法
- 【Linux开发】【Qt开发】tslibs的配置(触摸屏没有,HDMI屏幕):Qt界面响应USB鼠标
- C#制作鼠标可以穿透的窗体
- Linux下如果忘记MySQL的root密码,可以通过修改配置的方法,重置root密码
- Qt5.2.0 MinGW480 release静态版编译结果、过程及QtCreator配置分享(realfan的编译方法)(configure -h可以显示帮助)(静态编译mysql插件,需要做一些其它工作,机器上要有mysql)(不编译qtwebkit,就不用安装ActivePerl了)(用到 QMediaPlayer的编译办法)
- Qt5.8 鼠标穿透(让鼠标点击png透明处没有反应)
- WPF设置窗体可以使用鼠标拖动大小的方法
- C# 鼠标穿透窗体功能的实现方法
- c# 无边框窗体鼠标点击移动方法
- 从网上看到的QT的android版安装到Linux的配置方法
- Qt实现窗体无边框,并且点击windows任务栏图标可以最小化
- setClickable 设置为true时,表明控件可以点击,如果为false,就不能点击;“点击”适用于鼠标、键盘按键、遥控器等; 注意,setOnClickListener方法会默认把控件的se
- C#制作鼠标可以穿透的窗体
- Qt Qt Quick QML 打包发布程序出现缺少dll,窗体空白,点击后无反应等发布不成功的终极解决方法
- linux(Ubuntu)/qt-4.1.0-x11的安装