2010-03-12 56 views
1

我目前正在開發一個跨平臺的虛擬鍵盤。在Linux中,我能夠做任何我想做的事情,但在Windows中,我遇到了問題,以防止小部件獲得鍵盤焦點。Windows上的Qt :: X11BypassWindowManagerHint功能

在linux中,使用窗口標誌

Qt::X11BypassWindowManagerHint 

小部件永遠不會鍵盤輸入,當然,該標誌不能在Windows

工作有什麼相當於該標記或一些我可以使用的方法呢?

任何想法將提前

+1

爲什麼不應該在不應該有焦點的小部件上使用setFocusPolicy(Qt :: NoFocus)?如果你想要一個無邊框的小部件,試試setWindowFlags(Qt :: Tool | Qt :: FramelessWindowHint)而不是Qt :: X11BypassWindowManagerHint。 – bgs

+0

我試過了,它並不以我想要的方式工作。 Qt :: X11BypassWindowManagerHint允許我使用任何窗口,而不僅僅是我的應用程序...在x11系統中。謝謝回覆。 – Hector

回答

1

我發佈了一個類似的問題在Make a floating QDockWidget unfocusable的答案。在Win32上,你並沒有完全繞過窗口管理器的選擇,但是通過攔截nativeEvent來處理WM_MOUSEACTIVATE,你應該能夠獲得大部分的行爲。

0

謝謝,我會嘗試忽略該事件的讚賞。我相信你在主應用程序窗口上需要忽略FocusIn - 不確定實際事件,你可能需要對它進行原型設計。您可以通過安裝事件過濾器或手動重新實施event方法之一(可能爲event本身)來執行忽略事件。我不知道哪個是首選的方式,但我會嘗試事件過濾器首先爲此任務:http://doc.trolltech.com/4.6/qobject.html#eventFilter

我從來沒有試圖捕獲鍵盤焦點事件,但我已經能夠成功地忽略轉義鑰匙在QDialog,以防止用戶意外關閉窗口。我相信它應該是可能的。