2009-04-21 66 views
2

我試圖創建的Qt/C++與Qt4.5一個應用程序,並希望任何活動窗口來改變鼠標懸停事件不透明度...鼠標移到透明的Qt

據我瞭解,有在Qt中沒有顯式的鼠標懸停事件。

但是,通過在聲明我的主窗口的類中重新實現QWidget的mousemoveevent(),我得到了基本的功能。但是,只要鼠標移過我在那裏創建的任何組框(可以理解,因爲QGroupbox自己重新實現了mousemoveevent),主窗口的mousemoveevent不會被調用。所以作爲一個便宜的工作,我仍然使用我的主窗口的mousemove事件,但查詢全局鼠標位置並基於主窗口的(x,y)位置(通過 - > pos()獲得)和窗口大小( - > size - > rHeight和rWidth),我檢查鼠標是否位於主窗口區域的邊界內,從而更改不透明度。

這已經取得了非常有限的成功。右邊框工作正常,左邊更改不透明度4像素。頂部不起作用(大概是因爲鼠標經過菜單欄和標題欄),底部變化太早。

我想創建一個空的容器QWidget類,然後把所有的休息放在那裏,但我覺得它仍然不能解決基礎小部件沒有收到mousemoveevent的大問題,如果它已經實現在子部件。

請提出我在我的方法或任何其他方法中做出的任何更正/錯誤以達到此目的。

p.s.我懷疑這事,但我工作的Qt Creator IDE,所沒有的Qt集成到VS2008(這是相同的類反正 - 雖然不同的編譯器,MinGW的

回答

2

爲每個子控件可能做的伎倆的安裝事件過濾器。這將允許您的主窗口接收兒童事件,例如來自您的組框的兒童事件。你可以找到示例代碼here

1

如果我理解你正在試圖做什麼,我會重新實現widget的enterEvent()和leaveEvent()。鼠標輸入事件會觸發淡入,而leaveEvent會觸發淡出。

編輯:重新閱讀幾次後,我仍然不確定你想要完成什麼。對不起,如果我的建議沒有幫助。 :-)

+0

我想要的是改變mousevoer事件的透明度....但由於QGroupBox已經實現mousemoveevent()[reimp從QWidget]我的主窗口並沒有得到mousemoveevent調用,如果鼠標是任何froup箱子裏面..... 進入和離開事件只是我的工作圍繞此....但我笨拙的方式並沒有考慮到菜單欄等,頂部.... 如果您有任何其他方式做到這一點,我對它開放...... – 147 2009-04-21 15:18:49