我正在尝试使用 Qt4.5 在 Qt/C++ 中创建一个应用程序,并希望任何活动窗口在鼠标悬停事件上更改不透明度...
据我了解,Qt 中没有明确的鼠标悬停事件。
但是,通过在声明我的主窗口的类中重新实现 QWidget 的 mousemoveevent(),我得到了基本功能。但是,只要鼠标经过我在其中创建的任何组框,就不会调用主窗口的 mousemoveevent(可以理解,因为 QGroupbox 有自己的 mousemoveevent 重新实现)。
因此,作为一种廉价的解决方法,我仍在使用主窗口的 mousemoveevent,但查询全局鼠标位置并基于主窗口的 (x,y) 位置(通过 ->pos() 获得)和窗口大小( -> 大小 -> rHeight 和 rWidth),我检查鼠标是否在主窗口区域的范围内并因此更改不透明度。
这取得了非常有限的成功。右边框工作正常,左边框提前 4 个像素改变不透明度。顶部不起作用(可能是因为鼠标穿过菜单栏和标题栏)并且底部更改得太早了。
我想创建一个空容器 QWidget 类,然后将所有其余部分放在那里,但我觉得如果它已经在子小部件中实现,它仍然无法解决基本小部件不接收 mousemoveevent 的大问题。
请提出我在我的方法中所做的任何更正/错误或任何替代方法来实现这一点。
ps 我怀疑这很重要,但我正在使用 Qt Creator IDE,而不是 Qt 集成到 VS2008 中(无论如何它是相同的类 - 虽然不同的编译器,mingw)