Qt 不规则窗体 – 鼠标点击穿透

之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:《Qt 不规则窗体 – 无边框半透明》

其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿透。鼠标点击穿透被广泛应用在桌面挂件程序上,目的是为了避免鼠标对窗体进行误操作。

Qt 并没有自带的方法可以实现该功能,所以需要调用系统本身的 API 来实现。这里介绍下 Windows 下和 Linux 下如何实现鼠标点击穿透。

Windows API : SetWindowLong

SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。

函数定义:

头文件:

代码示例:

Continue Reading…

Qt 不规则窗体 – 无边框半透明

最近因为项目需要,用 Qt 写不规则窗体,要求是无边框,且半透明。

无边框

无边框其实很好写,Qt里有现成的方法:setWindowFlags(Qt::FramelessWindowHint);

这样你就能看到一个无边框无菜单栏无状态栏无按钮的一个窗体了。
QtFramelessWindowHint
Continue Reading…

Qt 自定义鼠标样式 QCursor

在有些应用中,我们往往需要有个自定义的鼠标样式,作为整个应用的风格元素之一。特别是游戏,有个风格匹配的鼠标样式才不会让人容易出戏。
Qt 中的 QCursor 很好的支持了这个功能。具体的文档参考《 Qt 5.3.1 Reference Documentation 》中 Qt 5.3 -> Qt GUI -> C++ Classes -> QCursor 。这里就不多讲。

总结下 Qt 中自定义鼠标样式的3个方法:

1.Qt::CursorShape

Qt 自带了一套鼠标样式,你可以选择在某个事件中调用某个特定的样式。提供的 CursorShape 有下表:
QtCursorShape
代码:

Continue Reading…