需求:改变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)
{
QWheel