如何停止将鼠标和所有事件传播到父级,但允许事件传播到组件及其子级

问题描述 投票:0回答:1
class PageGroupHandler: public QQuickWidget
{
    Q_OBJECT
public:
    PageGroupHandler();
protected:
    bool eventFilter(QObject *obj, QEvent *event);
};

PageGroupHandler::PageGroupHandler()
    : QQuickWidget(QUrl("qrc:/custom/qml/PagesGroups/PageManager.qml"))
{
    this->installEventFilter(this);
}
bool PageGroupHandler::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == this || obj->parent() == this) {
        return QObject::eventFilter(obj, event);
    }
    return true;
}

注意:没有错误。我已经加载了一个 qml 组件,它有一些矩形组件,有些有鼠标事件,有些没有,所以当我在其上滚动时,事件起作用,但是当没有滚动区域时,本身就是滚动区域的父级开始滚动,这很奇怪.

c++ qt qml mouseevent qquickwidget
1个回答
0
投票

据我所知,当您移动鼠标时,您首先会在大多数子小部件上收到该事件。因此,您可以在子小部件中覆盖特定事件(例如 CustomWidget::mouseMoveEvent...),而不调用父实现(例如 QWidget::mouseMoveEvent),并且父小部件不会收到该事件。

© www.soinside.com 2019 - 2024. All rights reserved.