如何接收 QGraphicsView 的滚动条鼠标事件

How to receive scrollbar mouse events for QGraphicsView

在 qt 小部件中 QGraphicsView 我想检测鼠标按下、鼠标释放和鼠标移动事件。 我从 QGraphicsView 派生了一个 class 并且覆盖了以下函数:

现在我几乎可以在任何地方检测到这些鼠标事件,除了滚动条所在的区域,它是 QGraphicsView 的一部分。 我希望能够捕获这些事件并手动移动滚动条。

编辑:
我正在尝试在 windows 环境中模拟第二只鼠标发送 WM_LBUTTONDOWN,... 事件。我希望也能够为 QGraphicsView 中的滚动条检测到此事件。 除了检测事件,我还想知道 event->x() 和 event->()y 的位置。

QGraphicsView继承了QAbstractScrollAreaclass。因此可以使用 QAbstractScrollArea::verticalScrollbarQAbstractScrollArea::horizontalScrollbar 方法访问滚动条小部件。

一旦可以访问滚动条对象,您甚至不必使用事件过滤器,因为 QScrollBar 继承了 QAbstractSlider 并因此提供了信号:

QAbstractSlider::sliderPressed()
QAbstractSlider::sliderReleased()

因此您可以将它们连接到您的插槽,例如:

connect(horizontalScrollBar(), SIGNAL(sliderPressed()), this, SLOT(doSomething()));
connect(horizontalScrollBar(), SIGNAL(sliderReleased()), this, SLOT(doSomething()));

如果您需要事件的位置,则必须使用事件过滤器。您可以在小部件对象上安装事件过滤器。