在Qt中跟踪事件

track events in Qt

本文关键字:事件 跟踪 Qt      更新时间:2023-10-16

我需要获得在Qt小部件(Qt c++)中触发的所有事件的列表,就像一个实用程序,可以捕获所有事件或一些将被调用的函数,以及每次事件被触发时传递给函数的事件细节。

谁能告诉我如何做到这一点,或者有什么免费的实用程序可用于此目的?

QObject::installEventFilter是你想要的。你可以看到进入对象的所有事件。

如果你需要查看所有的事件,你可以在QApplication上安装事件过滤器,参考文档QCoreApplication::notify:

在QCoreApplication::instance()上安装事件过滤器。这样一个事件过滤器能够处理所有小部件的所有事件,所以它是就像重新实现notify()一样强大;此外,它的可能有多个应用程序全局事件筛选器。全球事件过滤器甚至可以查看禁用小部件的鼠标事件。请注意,中的对象调用应用程序事件筛选器主线程。

如果你做一个类衍生自QWidget(让我们称之为RecordingWidget),你可以重新实现它的event()功能以任何方式记录你想(也许在RecordingWidget的静态成员中保持日志),然后继续将事件传递给QWidget的默认event功能:

bool RecordingWidget::event(QEvent *event)
{
    // Record stuff
    ...
    // Send the event through QWidget's default event implementation
    return QWidget::event(event);
}