我继承了QTextEdit
class Q_My_TextEdit(QtGui.QTextEdit):
def __init__(self, *args):
QtGui.QTextEdit.__init__(self, *args)
def undo(self):
print("undo")
#my own undo code
在我的另一堂课中:
self.textedit=Q_My_TextEdit()
def keyPressEvent(self,event):
if event.key()==(Qt.Key_Control and Qt.Key_Z):
self.textedit.undo()
如果在QTextEdit中键入一些文本,然后点击CTRL-Z,它会被撤消编辑,但不会调用“撤消”功能。那么它如何运作呢?
背景是,在第二步中我想设置新的Text(setText()),因此删除了堆栈。我已经有运行代码来自己进行撤销,但我无法在CTRL-Z上触发它,因为使用“Z”时,keyhortcut以某种方式保留。例如,如果我使用event.key()==(Qt.Key_Control and Qt.Key_Y)
调用自己的撤消操作,则可以正常工作。
答案 0 :(得分:0)
在C ++中你必须安装一个事件过滤器,可能与PyQt类似(覆盖虚拟bool eventFilter(QObject * pObject,QEvent * pEvent);在你的编辑器类中)。 CTRL-Z可能被QTextEdit事件过滤器过滤,因此它永远不会到达keyPressEvent。
答案 1 :(得分:0)
啊,除了我在第二堂课中的keyPressEvent之外,你还必须把它放到子类中!
class Q_My_TextEdit(QtGui.QTextEdit):
def __init__(self, *args):
QtGui.QTextEdit.__init__(self, *args)
def keyPressEvent(self,event):
if event.key()==(Qt.Key_Control and Qt.Key_Z):
self.undo()
#To get the remaining functionality back (e.g. without this, typing would not work):
QTextEdit.keyPressEvent(self,event)
def undo(self):
print("undo")
#my own undo code
但现在我不能再输入我的短信了!我该如何解决这个问题?
- >的解决即可。见Properly handling a keyPressEvent in a Subclassed PyQT LineEdit