Qt 通过事件过滤器实现屏蔽某控件的某个事件响应(例如:屏蔽QScrollArea滚动区域对滚轮滚动的响应)

背景:QScrollArea里添加了多个QChart ,QChart里的图像可以通过滚轮滚动实现放大缩小,但与此同时QScrollArea窗口也会相应的发生滚动,无法定在某个位置上,只放大缩小QChart里的图像。

解决办法:利用事件过滤器,屏蔽QScrollArea 滚动区域对滚轮事件的响应。

.h文件里添加事件过滤器(重写过滤器):

protected:
    bool eventFilter(QObject *target, QEvent *event);

.cpp文件的构造函数里添加一下代码(注册要监听的窗口):

ui->scrollArea->viewport()->installEventFilter(this);//QSCrollArea 滚动区域是viewport()

过滤器的实现:

bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    if(target == ui->scrollArea->viewport())
    {
        if(event->type() == QEvent::Wheel)
        {
            //event->ignore();
            return true;      //只针对scrollArea窗口禁用滚轮滚动功能,返回true表示过滤
        }
    }
    else
    {
        //event->accept();
        return false;
    }
    return false;			//返回false表示不过滤
}

完成。

你可能感兴趣的:(Qt)