1

这是事件过滤器:

bool ListenerClass::eventFilter(QObject *obj, QEvent *event) {
    std::cout << "Got event type " << event->type() << std::endl;
    return false;
}

这是我在构造函数中安装它的方式QScrollArea

this->listenerObj = new ListenerClass(this);
this->setAttribute(Qt::WA_Hover);
this->setAttribute(Qt::WA_NoMousePropagation, false);
this->installEventFilter(this->listenerObj);

上述过滤器通常可以工作,因为它可以拦截调整大小、悬停等事件。但是,仅当到达滚动范围的边缘时才拦截滚轮事件,而不是在整个滚动期间。

Viewport position    User action         Output
----------------------------------------------------------
Top                  downwards wheel     <<No output>>
Middle               downwards wheel     <<No output>>
Middle               downwards wheel     <<No output>>
Just touch bottom    downwards wheel     Got event type 31
Bottom (can't        downwards wheel     Got event type 31
 scroll anymore)

在页面滚动期间如何拦截车轮事件?

4

1 回答 1

3

viewport()当用户滚动视口时,滚动区域的小部件中会发生事件。如果请求的滚动操作是可能的,则该事件被接受并且不会传播到滚动区域本身,因此您无法检测到它。

要解决此问题,只需将事件过滤器安装到viewport()小部件即可。

于 2013-07-08T11:40:29.777 回答