QWheelEvent::ignore() 在提升的 QLineEdit 中不起作用?

QWheelEvent::ignore() doesn't work in promoted QLineEdit?

本文关键字:QLineEdit 不起作用 ignore QWheelEvent      更新时间:2023-10-16

我将QLineEdit提升为自定义小部件并尝试重新实现鼠标事件处理程序。我需要处理除基于QLineEdit的小部件的父级mouseDoubleClickEvent()之外的所有鼠标事件(父级是一个自定义可滚动区域)。除了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文档:"滚轮事件在鼠标光标下发送到小部件,但如果该小部件不处理事件,它们将被发送到焦点小部件。

如果希望父小部件为子小部件处理它们,可以在子小部件上安装事件过滤器,也可以直接从子小部件的wheelEvent方法调用父小部件上的方法。