zoukankan      html  css  js  c++  java
  • QT 事件过滤器 eventFilter

    在监测的代码里执行需要的行为. 这可以用event Filter来达到. 设置一个event filter有两个步骤:

    1. 在目标对象上调用installEventFilter(),将监测对象注册到目标对象上.
    2. 在监测对象的eventFilter()方法里处理目标对象的事件.

    在ctor里注册监测对象是一个好地方:
    CustomerInfoDialog::CustomerInfoDialog(QWidget *parent) :QDialog(parent)
    {
        ...
        firstNameEdit->installEventFilter(this);
        lastNameEdit->installEventFilter(this);
        cityEdit->installEventFilter(this);
        phoneNumberEdit->installEventFilter(this);
     }

    一旦event Filter注册了, 发送到firstNameEdit, lastNameEdit, cityEdit和phoneNumberEdit的事件在被发送到原来的目的地之前, 会先发到CustomerInfoDialog的eventFilter()函数.

    这是接收这些事件的eventFilter()函数:
    bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)
    {
        if (target == firstnameEdit || target == lastNameEdit
            || target == cityEdit || target == phoneNumberEdit)
        {
            if(event->type() == QEvent::KeyPress)
            {
                QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
                if (keyEvent->key() == Qt::Key_Space)
                {
                    focusNextChild();
                    return true;
                }
            }
        }
        return QDialog::eventFilter(target, event);
    }

  • 相关阅读:
    bzoj4196: [Noi2015]软件包管理器
    bzoj3083: 遥远的国度
    bzoj4034: [HAOI2015]T2
    2.EXIT_KEY
    AD如何1比1打印
    编程时注意,
    同步事件、异步事件、轮询
    事件位
    挂起进程相关API
    PROCESS_EVENT_POLL事件
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3947060.html
Copyright © 2011-2022 走看看