2017-07-19 30 views
0

我無法讓PyQt4中的「focusInEvent」爲QDockWidget派生類工作。我一直在尋找,似乎事件的重新實現語法是正確的,但我的事件處理程序中的代碼永遠不會被執行(我在事件代碼塊中設置了一個斷點,但它從未被觸發)。這是我所做的:焦點事件是否適用於QDockWidget對象?

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class ToolWindow(QDockWidget): 
    def __init__(self, title, parent = None): 
     super(ToolWindow, self).__init__(title, parent) 

     ...initialization code here... 

    def focusInEvent(self, event): 
     ..do on-focus work here... 

在運行時,我通過鼠標點擊它將焦點設置到停靠處。我點擊了停靠窗口標題欄和停靠點客戶端空間,但沒有任何事件觸發。我在應用程序中單擊其他「ToolWindow」對象,但沒有一個對象在關注時觸發事件。這不是正確的事件嗎?此外,我試圖繞過,但也沒有奏效。任何建議非常感謝。

回答

1

問題是許多QWidgets在Qt::NoFocus模式下有focusPolicy屬性,然後根據doc

Qt :: TabFocus:該小部件通過Tab鍵接受焦點。

Qt :: ClickFocus:小部件通過單擊來接受焦點。

Qt :: StrongFocus:該小部件通過tab和click來接受焦點。在macOS上,這也將表示該小組件在'文本/列表聚焦模式'時接受選項卡焦點。

Qt :: WheelFocus:像Qt :: StrongFocus一樣,再加上小部件通過使用鼠標滾輪接受焦點。

Qt :: NoFocus:小部件不接受焦點。

所以要激活焦點,我建議將該屬性更改爲Qt :: StrongFocus

class ToolWindow(QtGui.QDockWidget): 
    def __init__(self, title, parent = None): 
     super(ToolWindow, self).__init__(title, parent) 
     self.setFocusPolicy(QtCore.Qt.StrongFocus) 
+0

謝謝你,eyllanesc,做到了。 – LKeene