并没有锚点放缩
时间: 2023-07-11 16:14:28 浏览: 49
非常抱歉,我在之前的回答中犯了一个错误。在实现放大和缩小时,应该使用setTransformationAnchor方法指定变换的锚点为鼠标位置,而不是setResizeAnchor方法。下面是正确的代码实现:
```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);
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());
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
}
};
```
在上面的实现中,我们在wheelEvent方法中添加了setTransformationAnchor(QGraphicsView::AnchorUnderMouse)方法,它可以设置变换的锚点为鼠标位置。这样,在放大和缩小的同时,锚点也会随着鼠标移动而移动。