2.1.1版本 qcustomplot 滚轮只放大x轴数据,y轴数据不动,并且跟x轴轴距对应
时间: 2023-11-28 11:49:47 浏览: 130
这个问题可以通过设置QCustomPlot的xAxis和yAxis的范围来解决。在QCustomPlot中,可以使用下面的代码来实现:
```cpp
// 设置x轴范围为[lower, upper]
plot->xAxis->setRange(lower, upper);
// 获取当前y轴范围
QCPRange range = plot->yAxis->range();
// 根据当前y轴范围和x轴范围的比例来设置新的y轴范围
double yRange = range.size() / (upper - lower);
double yCenter = (range.lower + range.upper) / 2;
double newYLower = yCenter - yRange * (upper - lower) / 2;
double newYUpper = yCenter + yRange * (upper - lower) / 2;
plot->yAxis->setRange(newYLower, newYUpper);
```
这段代码将x轴范围设置为[lower, upper],然后基于当前y轴范围和x轴范围的比例来计算新的y轴范围,保持y轴数据的相对位置不变。注意,在设置新的y轴范围时,需要使用QCustomPlot的range()函数来获取当前y轴范围。
相关问题
2.1.1版本 qcustomplot 滚轮只放大x轴数据,y轴数据不动,并且跟y轴轴距对应
在 QCustomPlot 中,滚轮操作默认是同时放大 x 轴和 y 轴的。如果你只想放大 x 轴,可以通过以下代码实现:
```cpp
ui->plot->axisRect()->setRangeZoom(Qt::Horizontal);
```
这样设置后,滚轮操作只会放大 x 轴的数据。如果要同时保持 y 轴轴距不变,可以在滚轮事件中手动调整 y 轴的范围,使其与 x 轴的范围比例相同。示例代码如下:
```cpp
void MainWindow::onPlotMouseWheel(QWheelEvent *event)
{
double factor = qPow(1.2, event->delta() / 240.0); // 计算缩放因子
double x = ui->plot->xAxis->pixelToCoord(event->pos().x()); // 获取鼠标指针所在的 x 坐标
double y = ui->plot->yAxis->pixelToCoord(event->pos().y()); // 获取鼠标指针所在的 y 坐标
double xRange = ui->plot->xAxis->range().size() / factor; // 计算新的 x 轴范围
double yRange = xRange * ui->plot->height() / ui->plot->width(); // 计算新的 y 轴范围,保持比例不变
ui->plot->xAxis->setRange(x - xRange / 2, x + xRange / 2); // 设置新的 x 轴范围
ui->plot->yAxis->setRange(y - yRange / 2, y + yRange / 2); // 设置新的 y 轴范围
ui->plot->replot(); // 重新绘制图形
}
```
将上述代码与 `QCustomPlot` 的 `mouseWheel` 事件关联,即可实现滚轮只放大 x 轴数据,y 轴数据不动,并且跟 y 轴轴距对应的效果。
阅读全文