QT 事件的传递先后顺序 | 您所在的位置:网站首页 › qt图层顺序 › QT 事件的传递先后顺序 |
目录 一、Qt提供5个级别的事件处理和过滤 (从后到先): 1、重新实现事件函数。 2、重新实现QObject::event(). 3、安装事件过滤器 4、在 QApplication 上安装事件过滤器。 5、重新实现QApplication 的 notify()方法. 二、event 与 Even Filter 1. event() 简介 2. event 返回值的作用 3. 事件过滤器(Even Filter) 一、Qt提供5个级别的事件处理和过滤 (从后到先): 1、重新实现事件函数。比如: mousePressEvent(), keyPressEvent(), paintEvent() 。 这是最常规的事件处理方法。 2、重新实现QObject::event().这一般用在Qt没有提供该事件的处理函数时。也就是,我们增加新的事件时。 3、安装事件过滤器 installEventFilter() -- bool eventFilter(QObject *target, QEvent *event) 4、在 QApplication 上安装事件过滤器。 这之所以被单独列出来是因为: QApplication 上的事件过滤器将捕获应用程序的所有事件,而且***个获得该事件。也就是说事件在发送给其它任何一个event filter之前发送给QApplication的event filter。 5、重新实现QApplication 的 notify()方法. Qt使用 notify()来分发事件。要想在任何事件处理器捕获事件之前捕获事件,***的方法就是重新实现QApplication 的 notify()方法。 二、event 与 Even Filter 1. event() 简介event 函数的作用就在于 事件的分发,在 even filter 之后执行 bool myWidget::event(QEvent *e) { if (e->type() == QEvent::KeyPress) { //将QEvent对象转换为真正的QKeyEvent对象 QKeyEvent *keyEvent = static_cast(e); if (keyEvent->key() == Qt::Key_Tab) { qDebug() type() == QEvent::KeyPress) { //将QEvent对象转换为真正的QKeyEvent对象 QKeyEvent *keyEvent = static_cast(e); if (keyEvent->key() == Qt::Key_Tab) { qDebug() installEventFilter(this); } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == textEdit) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); qDebug() |
CopyRight 2018-2019 实验室设备网 版权所有 |