我有一个QPlainTextEdit,希望在失去焦点时处理内容。我看到可以使用focusChanged事件或focusOutEvent虚函数来实现这一点。
我不知道如何使用新语法传递参数(即
由于界面是使用QT Designer创建的,继承QPlainTextEdit会过度杀伤,所以我尝试通过简单地使用my_text_edit.focusOutEvent = my_handler覆盖虚拟函数来重写它。这确实拦截了我想要的消息,但显然覆盖了QPlainTextEdit中的一些内置功能,导致文本编辑器的光标在失去焦点时不会消失。我想到应该以某种方式调用原始事件,对我有效的方法如下:
在我的__init__方法中:
我基本上是在复制我希望库为我做的事情。我觉得这太笨拙了,而且我可以看到在维护过程中它可能会有很多反效果。有人能建议一种更简洁的方法吗?谢谢!
我不知道如何使用新语法传递参数(即
my_app.focusChanged.connect(my_handler)
,其中my_handler
是本地定义的函数)。因此,我尝试使用虚函数。由于界面是使用QT Designer创建的,继承QPlainTextEdit会过度杀伤,所以我尝试通过简单地使用my_text_edit.focusOutEvent = my_handler覆盖虚拟函数来重写它。这确实拦截了我想要的消息,但显然覆盖了QPlainTextEdit中的一些内置功能,导致文本编辑器的光标在失去焦点时不会消失。我想到应该以某种方式调用原始事件,对我有效的方法如下:
在我的__init__方法中:
self.original_handler = self.my_text_edit.focusOutEvent
self.my_text_edit.focusOutEvent = self.my_handler
my_handler
的定义如下:
def my_handler(self, event):
self.original_handler(event)
# my own handling follows...
我基本上是在复制我希望库为我做的事情。我觉得这太笨拙了,而且我可以看到在维护过程中它可能会有很多反效果。有人能建议一种更简洁的方法吗?谢谢!