需求

有时候Qt某个控件的事件并不能满足我们的需求,那么就需要重写这个控件。我在项目中有个需求,当鼠标停留在QtableWidget上某个item的时候,要将这个item变化一种颜色。当鼠标离开的时候,将item复原。当鼠标指针在tableWidget的范围之内的时候,用 itemEntered(QTableWidgetItem *)信号就可以,但当鼠标离开tableWidget的时候,就需要自己用事件去处理了。可以重写tableWidget。但我只要判断一个事件,重写太麻烦了。这时候就需要Qt 事件过滤器了

具体做法

1 .调用installEventFilter()注册需要管理的对象
2 .在eventFilter()里处理需要管理的对象事件

我的例子是当鼠标离开tableWidget的去复原原先的样式:

//matrixTableWidgt 为具体的控件,这里可以是button label之类的
matrixTableWidgt->installEventFilter(this);



//实现 bool eventFilter(QObject *, QEvent *);函数
bool matrixWidget::eventFilter(QObject *target, QEvent * event)
{
    if(target  == matrixTableWidgt)
    {
        if(event->type() == QEvent::Leave)
        {
            ....dosomething
        }
    }

    return QWidget::eventFilter(target,event);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注