也许这个问题被问过很多次了,但我找不到解决方案。
我有一个对话框:
class PostDialog(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.ui = Ui_Dialog() #code from designer!!
self.ui.setupUi(self)
self.ui.plainTextEdit = ContentEditor()
这个对话框有一个来自设计者的 QPlainTextEdit。
我需要覆盖 QPlainTextEdit 的 keyPress 和 keyRelease。
所以我已经将它子类化了:
class ContentEditor(QtGui.QPlainTextEdit):
def __init__(self, parent=None):
QtGui.QPlainTextEdit.__init__(self, parent)
def keyPressEvent(self, event):
print "do something"
但 ContentEditor.keyPressEvent 从未被调用!为什么?
请您参考如下方法:
我推荐使用 installEventFilter为此目的:
这看起来像:
class PostDialog(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.ui = Ui_Dialog() #code from designer!!
self.ui.setupUi(self)
self.ui.plainTextEdit.installEventFilter(self)
def eventFilter(self, event):
if event.type() == QtCore.QEvent.KeyPress:
# do some stuff ...
return True # means stop event propagation
else:
return QtGui.QDialog.eventFilter(self, event)
