Qt学习之路(9):事件过滤器

来源:互联网 发布:dm500s接收机 淘宝 编辑:程序博客网 时间:2024/06/05 03:32

首先简单描述一下事件过滤器,事件过滤器可以让我们对事件进行一些我们感兴趣的操作,它是QObject的函数,但是在QObject里面是一个空的函数体.我们需要重写这个函数,这样可以将一些我们感兴趣的操作进行过滤.

比如文本编辑框,我们可以在MainWindow上重写这个过滤器,然后调用

   text->installEventFilter(this);

这样文本编辑框的事件在分发之前就会先过滤.

下面的代码是用来过滤tab键的.如个没有这个代码,我们按下tab键会让鼠标退格,但是现在不会,并且在控制台输出语句.

bool MainWindow::eventFilter(QObject* obj,QEvent* event){    if(obj == text)//如果事件是从text传过来    {        if(event->type()==QEvent::KeyPress)//如果这个事件是按键类型的        {            auto KeyEvent = static_cast<QKeyEvent*>(event);//强制转换,event是没有key()函数的            if(KeyEvent->key()==Qt::Key_Tab)//如果按键时tab            {                qDebug()<<"press Tab key";                return true;//成功过滤            }            return false;//不过滤        }    } return QMainWindow::eventFilter(obj,event);//对于其他组件,不确定是否有过滤器}

思考一下,假如我们将return true注释掉,那么这个事件还是会被分发到相应的事件handler上,相应的效果会触发,只是多了控制台输出的语句.

0 0