我有一個Qt程序,包含許多按鈕,用戶可交互的小部件等。
在程序的一個階段,我希望所有的小部件暫時「停止工作」。停止表現爲鼠標點擊,而是將事件傳遞給一個函數。Qt - 暫時禁用所有事件或窗口功能?
(這是爲了讓用戶可以選擇一個小部件來執行元操作部分說明這裏:Get variable name of Qt Widget (for use in Stylesheet)?)
用戶會選擇一個小部件(做的東西),通過點擊它,當然點擊按鈕不得導致按鈕的綁定功能運行。
這樣做的正確(最抽象的,明智的)方法是什麼? (這不涉及太多的新代碼,即;不是每個部件的子類)
Qt爲此設計了什麼?
到目前爲止,我能夠(通過調用
QObject.findChildren(QtGui.QWidget)
因此該解決方案可以將這個檢索程序中所有的小部件列表
我目前的可怕想法。
- 一些如何在一個 函數中始終處理所有應用程序事件,並且在我需要 應用程序時不通過事件離子被休眠。
- 當我需要休眠時,製作一個新的透明窗口小部件,它接收鼠標點擊並在整個窗口上拉伸。點擊座標 ,找出下面的小部件。
- 以某種方式創建窗口的新「殼」實例。
謝謝!
(對不起,可怕的評論;在輕微搶)
蟒蛇2.7.2
PyQt4的
Windows 7的
這也正是該解決方案。如果你想'竊取'所有事件,在qApp上放置一個事件過濾器,它會阻止任何孩子接收它們。 – synthesizerpatel
事件過濾什麼也沒做。即使所有事件都被忽略,點擊按鈕仍然會運行這些功能!(除非我很蠢,不知道我在做什麼;是的) –
如果你想停止進一步處理的事件,確保你從eventFilter()返回true。而且,過濾所有事件是一個非常糟糕的主意 - 只過濾用戶輸入。一個更直接的方法是在頂級小部件上調用setEnabled(false)。 –