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);
    }

  • 相关阅读:
    如何快速转载CSDN及博客园中的博客
    Ubuntu18.04连不网 报"有线连接未托管"
    Ubuntu18.04的网络配置
    vim基本操作
    Git更新远程仓库代码到本地(转)
    POJ 3253 Fence Repair
    POJ 2503 Babelfish
    POJ 2002 Squares
    POJ 1840 Eqs
    POJ 3274 Gold Balanced Lineup
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3947060.html
Copyright © 2011-2022 走看看