PyQt 事件处理、剪贴板与拖放操作全解析
1. 事件处理机制
在 PyQt 中,当一个事件传递给一个小部件时,首先会调用该小部件的event()方法。这个方法如果处理了事件则返回True,否则返回False。若返回False,PyQt 会将事件传递给该小部件的父部件,然后再传递给父部件的父部件,直到有一个处理程序返回True,或者到达顶层(没有父部件),此时事件将被丢弃。event()方法可以自己处理事件,也可以将工作委托给特定的事件处理程序,如paintEvent()或mousePressEvent()。
当用户按下Tab键时,几乎在所有情况下,具有键盘焦点的小部件的event()方法会调用按Tab顺序的下一个小部件的setFocus()方法,并返回True,而不会将事件传递给任何键处理程序。不过,QTextEdit类重新实现了事件处理程序,可将文字制表符插入文本中,但也可以让其恢复到正常的焦点切换行为。
由于按键事件不会传递给键处理程序,所以我们不能通过重新实现键事件处理程序来阻止Tab键改变键盘焦点,而必须重新实现event()方法并在其