我在QtreeWidget中的一個小部件在Maya中(3D計算機圖形應用程序)。問題是,我的小部件不僅阻止了原生的CTRL + A熱鍵,它正在選擇我的樹中的所有東西。我怎樣才能讓這個熱鍵泡到父應用程序?如何禁用選擇所有QTreeView密鑰綁定
我已經使用事件過濾器進行了大量的自定義鍵處理,但似乎樹想爲我處理這一個。我喜歡的方向鍵的功能,所以我不希望禁用所有鍵綁定,但如果我必須這樣做,我會......如果我知道如何
乾杯,
附:類似的事情在這裏問,但答案忽略了一個問題: qt: I would like to disable the key bindings automatically set for a QTreeView
這裏是Python中的解決方案的QTreeWidget。
我無法確定這是我用Python做過的最骯髒的事情還是隻是一個漂亮的Python版本的擴展方法! (感覺像前者)
問題是,我實際上沒有QTreeView類。它是在一個名爲「樹」的設計師加入,所以我硬是推翻,則該方法從我方法調用的基本功能...
def __init__ #...snip...
self.tree.keyPressEvent = self.onKeyPressEvent # Replace with my method
def onKeyPressEvent(self, event):
if event.key() == Qt.Key_A and event.modifiers() == Qt.ControlModifier:
event.ignore() # Allows fall-through to the parent
return
QtGui.QTreeView.keyPressEvent(self.tree, event) # All other behaviors handled
...所以,這只是太髒了我。我知道必須有這種常見情況的解決方案(沒有子類)。我已經在使用事件過濾器,所以我嘗試了它並且工作。關鍵是知道事件在哪裏處理,並使用event.ignore()
以及返回True
來允許事件冒泡並阻止CTRL + A的KeyPressEvent
。
def eventFilter(self, obj, event):
# Filter out all non-KeyPress events
if not event.type() == QEvent.KeyPress:
return False
if event.key() == Qt.Key_A and event.modifiers() == Qt.ControlModifier:
event.ignore() # Allows fall-through to the parent
return True # Block the tree's KeyPressEvent
return False # Do nothing
奇怪。當按下按鍵或按下修飾鍵時,我會看到單獨的事件,但當收到「a」時,修飾符總是爲false。我會給我的問題添加一個例子 – Rafe 2012-07-30 01:35:41
完美! QWidget.keyPressEvent不是必需的。無視這個伎倆!沒有這個事件請參閱上面我的問題的結果。 – Rafe 2012-07-30 01:57:45