要实现这样的效果,可以使用QGraphicsView
的setTransform()
方法来设置变换矩阵。具体步骤如下:
- 创建一个自定义的
QGraphicsView
子类,并重写其wheelEvent()
方法。
class CustomGraphicsView : public QGraphicsView {
public:
void wheelEvent(QWheelEvent *event) override;
};
- 在
wheelEvent()
方法中,根据滚轮事件的delta值判断放大或缩小,并调整视图的变换矩阵。
void CustomGraphicsView::wheelEvent(QWheelEvent *event) {
// 获取当前的缩放因子
qreal currentScale = transform().m11();
// 根据滚轮事件的delta值判断是放大还是缩小
int delta = event->angleDelta().y();
qreal scaleFactor = (delta > 0) ? 1.2 : 0.8; // 自定义缩放因子
// 根据缩放因子和滚轮事件位置进行变换
QPointF mousePos = mapToScene(event->pos());
translate(mousePos.x(), mousePos.y());
scale(scaleFactor, scaleFactor);
translate(-mousePos.x(), -mousePos.y());
}
- 在主窗口或其他地方创建并使用自定义的
CustomGraphicsView
对象。
CustomGraphicsView *view = new CustomGraphicsView();
通过以上步骤,当在 QGraphicsView
中滚动鼠标滚轮时,画布上的点会随着视图的放大和缩小而相应地放大和缩小。请注意根据实际需求调整变换因子和其他参数。
内容由零声教学AI助手提供,问题来源于学员提问