Qt 和 c++环境下QGriphicsView怎么屏蔽其本身的滚动条对鼠标滚轮的响应
重写了鼠标滚轮响应事件为缩放View中的GraphicsScene视图,但是view中滚动栏也会响应鼠标滚轮事件导致效果不好,过滤器相关的内容也只找到屏蔽鼠标滚轮,期望效果是让view中scene按照鼠标中心缩放,怎么才能实现这种效果?
你可以通过以下方法实现这种效果:
在QGraphicsView类中重写viewportEvent()函数,并在该函数中过滤掉鼠标滚轮事件。
在QGraphicsView类中重写wheelEvent()函数,实现自己的缩放操作。
例如:
class MyGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
MyGraphicsView(QWidget *parent = 0) : QGraphicsView(parent) {}
protected:
bool viewportEvent(QEvent *event)
{
if (event->type() == QEvent::Wheel)
return true;
return QGraphicsView::viewportEvent(event);
}
void wheelEvent(QWheelEvent *event)
{
qreal scaleFactor = 1.15;
if (event->delta() > 0)
{
scale(scaleFactor, scaleFactor);
}
else
{
scale(1.0 / scaleFactor, 1.0 / scaleFactor);
}
event->accept();
}
};