我正在使用 PySide 开发一个应用程序,我想知道是否有一种方法可以记录哪些事件进入主事件循环以及哪些事件离开。我的应用程序使用无线程,它是完全异步的,但我想拥有事件循环的日志注册表以用于调试目的。我使用
logging
作为我的日志记录工具(废话)。
和平与善。
作为一个优秀的 reddit 用户回复:
检查一下:QCoreApplication.notify。事件循环在 QCoreApplication 中实现,因此您可以子类化并安装自己的代码来检查事件。
应用程序类(QApplication): events = {constant: name for name,constant in QEvent.dict.items() if name[0].isupper() 和 isinstance(constant, int)}
def notify(self, obj, event):
print("{:<20}{}".format(Application.events[event.type()], obj))
return super().notify(obj, event)
效果很好。 https://i.sstatic.net/G7Z46.png
当然,您仍然需要弄清楚哪些事件正在被消耗。那个超级调用返回
True
或 False
,但几乎我看到的每个事件都返回 True
。您可能必须遍历对象关系或其他东西 - 我不确定,因为我还没有这样做,但似乎有很好的支持进入该循环并做您喜欢的事情。
但是,我更倾向于遵循Qt文档中列出的第三个选项:
3.在
上安装事件过滤器。这样的事件过滤器能够处理所有小部件的所有事件,因此它与重新实现QCoreApplication::instance()
一样强大;此外,可以有多个应用程序全局事件过滤器。全局事件过滤器甚至可以看到禁用的小部件的鼠标事件。请注意,仅针对主线程中的对象调用应用程序事件过滤器。notify()