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檢查一次,效果挺好的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章