qcustomplot 滚轮只放大x轴数据,y轴数据不动,并且跟x轴轴距对应
时间: 2023-11-28 07:49:24 浏览: 235
您可以通过在 `QCustomPlot` 的 `wheelEvent` 中手动计算缩放比例来实现这一功能。以下是一个示例代码:
```cpp
void CustomPlot::wheelEvent(QWheelEvent *event)
{
if (event->modifiers() == Qt::ControlModifier) { // 只在按下 Ctrl 键时响应滚轮事件
double scaleFactor = 1.15; // 缩放比例
QPoint mousePos = event->pos(); // 鼠标位置
double xCenter = xAxis->pixelToCoord(mousePos.x()); // 鼠标所在的 x 坐标
double yCenter = yAxis->pixelToCoord(mousePos.y()); // 鼠标所在的 y 坐标
double xRange = xAxis->range().size(); // x 轴范围
double yRange = yAxis->range().size(); // y 轴范围
if (event->angleDelta().y() > 0) { // 鼠标向上滚动,放大
xAxis->setRange(xCenter - xRange / (2 * scaleFactor), xCenter + xRange / (2 * scaleFactor)); // 放大 x 轴
} else { // 鼠标向下滚动,缩小
xAxis->setRange(xCenter - xRange * scaleFactor / 2, xCenter + xRange * scaleFactor / 2); // 缩小 x 轴
}
yAxis->setRange(yCenter - yRange / 2, yCenter + yRange / 2); // y 轴不变
replot(); // 重新绘制
event->accept();
} else {
event->ignore();
}
}
```
在这个示例代码中,我们通过 `xAxis->pixelToCoord()` 方法将鼠标位置转换为 x 坐标,然后根据缩放比例和鼠标位置计算出新的 x 范围,并设置给 `xAxis`。而 y 轴的范围则保持不变,即使用当前范围的中心作为新范围的中心。最后调用 `replot()` 方法重新绘制图形。
阅读全文