Я продвигаю свой 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();
}
Из
QWheelEvent
документации : «события Wheel отправляются в виджет под курсором мыши, но если этот виджет не обрабатывает событие, они отправляются в виджет focus.»Если требуется, чтобы родительский элемент обрабатывал их для дочернего виджета, можно либо установить фильтр событий на дочернем виджете, либо можно напрямую вызвать метод на родительском виджете из
wheelEvent
метода дочернего элемента.