cpp版本的
时间: 2023-08-29 10:07:51 浏览: 41
以下是C++版本的代码实现:
```cpp
#include <QWheelEvent>
#include <QGraphicsView>
#include <QGraphicsScene>
class MyGraphicsView : public QGraphicsView {
public:
MyGraphicsView(QWidget* parent = nullptr)
: QGraphicsView(parent)
{
setRenderHint(QPainter::Antialiasing, true);
setRenderHint(QPainter::SmoothPixmapTransform, true);
setDragMode(QGraphicsView::ScrollHandDrag);
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
setMouseTracking(true);
setInteractive(true);
setScene(new QGraphicsScene(this));
}
protected:
void wheelEvent(QWheelEvent* event) override
{
const qreal zoomInFactor = 1.25;
const qreal zoomOutFactor = 1 / zoomInFactor;
QPointF oldPos = mapToScene(event->pos());
qreal zoomFactor = event->angleDelta().y() > 0 ? zoomInFactor : zoomOutFactor;
scale(zoomFactor, zoomFactor);
QPointF newPos = mapToScene(event->pos());
QPointF delta = newPos - oldPos;
translate(delta.x(), delta.y());
}
};
```
这个实现与Python版本的类似,只是语法不同。在这个实现中,我们首先创建了一个继承自QGraphicsView的MyGraphicsView类,并重写了wheelEvent方法,在该方法中实现了鼠标滚轮缩放的功能。具体来说,我们首先获取鼠标滚轮滚动的方向,然后根据方向缩放视图。接着获取鼠标滚轮滚动前后在场景中的位置差,然后平移视图以使放大和缩小的中心点在鼠标位置。