QWheelEvent:: ignore() не работает в продвинутом QLineEdit?

Я продвигаю свой QLineEditпользовательский виджет и пытаюсь переопределить обработчики событий мыши. Мне нужно обрабатывать все события мыши, кроме mouseDoubleClickEvent()родителя моего QLineEditвиджета (родитель-настраиваемая область прокрутки). Все работает хорошо, кроме wheelEvent(). QLineEditпо-прежнему ручка колеса мыши и родителя по-прежнему нет.
Вот мой промоутер QLineEdit:

HeightLineEdit::HeightLineEdit(QWidget* parent) :
QLineEdit(parent)
{
    this->setFocusPolicy(Qt::NoFocus);
}

void HeightLineEdit::mousePressEvent(QMouseEvent* event)
{
    event->ignore();
}

void HeightLineEdit::mouseMoveEvent(QMouseEvent* event)
{
    event->ignore();
}

void HeightLineEdit::mouseReleaseEvent(QMouseEvent* event)
{
    event->ignore();
}

void HeightLineEdit::mouseDoubleClickEvent(QMouseEvent* event)
{
    this->setFocus();
    this->selectAll();
}

void HeightLineEdit::wheelEvent(QWheelEvent* event)
{
    event->ignore();
}

1 ответ

  1. Из QWheelEventдокументации : «события Wheel отправляются в виджет под курсором мыши, но если этот виджет не обрабатывает событие, они отправляются в виджет focus.»

    Если требуется, чтобы родительский элемент обрабатывал их для дочернего виджета, можно либо установить фильтр событий на дочернем виджете, либо можно напрямую вызвать метод на родительском виджете из wheelEventметода дочернего элемента.