在设计的过程中遇到了一个问题,我在派生类里重载了mousemoveevent,程序运行时,发现点击这个派生类时,主窗口也会接收到这个事件。
解决方法:在定义的派生类中添加事件过滤器,接收到mousemoveevent事件后就将其处理不让其继续向下传递。
以下为代码:
先注册事件过滤器:
this->installEventFilter(this);
因为想要过滤的控件注册,因为我这里是对这个类进行过滤故用this
然后就是重载eventFilter
bool eventFilter(QObject *target,QEvent *event);
bool Animationbutton::eventFilter(QObject *target,QEvent *event)
{
if (target==this)
{
if (event->type()==QEvent::MouseMove)
{
mouseClicked();
return true;
}
else
return false;
}
else
return QWidget::eventFilter(target,event);
}
这样在运行的时候就解决了上述问题。