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

  • 相关阅读:
    17.正则表达式
    16.os模块-shutil模块-tarfile压缩模块
    15.序列化模块-时间模块-zip压缩模块
    第一章 单变量线性回归
    如何跑通MonoRTM模型的官方例子
    PHP命名规范
    js中要声明变量吗?
    php抓取网站图片源码
    InnoDB和MyISAM区别总结
    php分页代码。
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3947060.html
Copyright © 2011-2022 走看看