qt graphicsView滚轮控制等比缩放
时间: 2023-10-25 13:12:16 浏览: 55
好的,关于这个问题,可以在使用qt的graphicsView时,设置其属性:
```
graphicsView->setDragMode(QGraphicsView::ScrollHandDrag); // 设置鼠标拖动方式
graphicsView->setRenderHint(QPainter::Antialiasing); // 抗锯齿
graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); // 缩放的锚点是鼠标的位置
graphicsView->setResizeAnchor(QGraphicsView::AnchorUnderMouse); // 视图的 resize 命令也针对锚点
graphicsView->setInteractive(true); // 启动交互模式,否则鼠标事件无法响应
```
然后,可以在继承自QGraphicsView的类中实现鼠标滚轮事件:
```
void MyGraphicsView::wheelEvent(QWheelEvent* event) {
int numDegrees = event->delta() / 8; // 计算滚动角度,单位是 1/8度
qreal scaleFactor = 1.1; //缩放因子
if (event->modifiers() == Qt::ControlModifier) { //按下 Ctrl 键时同时进行水平和垂直缩放
if (event->delta() > 0) {
scale(scaleFactor, scaleFactor); //放大
} else {
scale(1 / scaleFactor, 1 / scaleFactor); //缩小
}
} else { //不按下 Ctrl 键时仅进行垂直缩放
if (event->delta() > 0) {
scale(1 / scaleFactor, 1 / scaleFactor); //缩小
} else {
scale(scaleFactor, scaleFactor); //放大
}
}
}
```
这样就实现了鼠标滚轮控制graphicsView的等比缩放。