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

首先简单描述一下事件过滤器,事件过滤器可以让我们对事件进行一些我们感兴趣的操作,它是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上,相应的效果会触发,只是多了控制台输出的语句.

你可能感兴趣的:(Qt学习之路(9):事件过滤器)