自定义QTreeWidget和QTableWidget控件鼠标滚轮事件

需求:改变QTreeWidget和QTableWidget控件中鼠标滚轮的响应动作,不让鼠标滚轮控制滚动条上下滚动。


实现:

1、在控件的实现函数中重新实现wheelEvent。

void TSSTree::wheelEvent(QWheelEvent* event) {
    qDebug("The wheel generate the event!");
    //需要实现的滚轮动作
}

2、如果这个控件没有独立的实现函数,比如是在UI中添加的,也没有别的需要实现的函数,可使用该方法。

实际上当鼠标位于控件上并滚动时,接收滚动动作的是该控件的滚动条,所以只要在主窗口的eventFilter中对target为滚动条的滚轮动作进行截获并处理就好了,当然首先要给滚动条安装事件过滤器。

安装事件过滤器:

//mainWindow.cpp
testTableWidget->verticalScrollBar()->installEventFilter(this);

事件过滤器

//mainWindow.cpp
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    if (target == testTableWidget->verticalScrollBar()){
        if(event->type() == QEvent::Wheel)
        {
            QWheelEvent *event1 = static_cast<QWheelEvent *>(event);
            if (event1->delta() < 0) {
                //滚轮向下滚动的处理
            }
            if (event1->delta() > 0) {
                //滚轮向上滚动的处理
            }
            return true;
        }
    }
    //其它事件交基类处理
    return QMainWindow::eventFilter(target, event);
}



版权声明:本文为Marvel90原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。