我正在使用 PySide 开发一个应用程序,我想知道是否有一种方法可以记录哪些事件进入主事件循环以及哪些事件离开。我的应用程序不使用线程,它是完全异步的,但我想拥有事件循环的日志注册表以用于调试目的。我logging
用作我的日志记录工具(duh)。
Pax et Bonum。
我正在使用 PySide 开发一个应用程序,我想知道是否有一种方法可以记录哪些事件进入主事件循环以及哪些事件离开。我的应用程序不使用线程,它是完全异步的,但我想拥有事件循环的日志注册表以用于调试目的。我logging
用作我的日志记录工具(duh)。
Pax et Bonum。
看看这个:http: //qt-project.org/doc/qt-4.8/qcoreapplication.html#notify。事件循环在 QCoreApplication 中实现,因此您可以子类化并安装自己的代码来检查事件。
类应用程序(QApplication):事件= {常量:名称的名称,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)
效果很好。http://i.imgur.com/mMLqQ5Y.png
当然,您仍然需要确定正在使用哪些事件。那个超级调用返回True
or False
,但我看到的几乎每个事件都返回了True
。你可能必须遍历对象关系或其他东西——我不确定,因为我没有这样做,但似乎有很好的支持来进入那个循环并做你喜欢的事情。
但是,我更倾向于遵循Qt 文档中列出的第三个选项:
3. 安装事件过滤器
QCoreApplication::instance()
。这样的事件过滤器能够处理所有小部件的所有事件,因此它与重新实现一样强大notify()
;此外,可以有多个应用程序全局事件过滤器。全局事件过滤器甚至可以看到禁用小部件的鼠标事件。请注意,应用程序事件过滤器仅对存在于主线程中的对象调用。