QT程序如何获知鼠标enter/leave通…

    今天想实现类似QQ消息盒子的功能:当鼠标进入通知栏图标的时候弹出一个小窗口,当鼠标离开通知栏图标的时候隐藏该窗口。但发现QSystemTrayIcon不是继承QWidget(why?这是为了跨平台,跨平台是个坑爹货啊)!所以不能很简单地 enterEvent/leaveEvent。怎么办呢?开始Google。
1)排行比较靠前的解决方案:http://www.qtcn.org /bbs/simple/?t48808.html 。这个在测试程序中是有效的。但是对我的应用不合适。因为该应用拥有不止一个通知栏图标(大部分应用应该不会这样)。MSG是 windows的消息,里面有窗口句柄。所以我一开始想只要知道通知栏图标的句柄,就可以知道是哪个通知栏图标获得此消息了。但是老问题又来了。 QSystemTrayIcon不是继承QWidget,不能获得winid。好吧,此路不通。
2)应该可行的解决方 案:http://svn.netlabs.org/repos/qt4/trunk/src/gui/util /qsystemtrayicon_win.cpp。 这是QSystemTrayIcon的源码(ps:很有学习的价值,看看人家怎么封装windows api的)。可以考虑在封装的时候,处理好鼠标enter/leave。我差点就这么动手搞了。不过继续Google,发现有个更简单的解决方案。
3) QSystemTrayIcon 有一个 geometry函数,介绍:Returns the geometry of the system tray icon in screen coordinates。 那就简单了,只要定时检查鼠标位置(我是用windows api GetCursorPos获取)是否在其中即可知道鼠标是否hover通知栏图标了。我设置成200ms检查一次,效果挺好的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值