QCustomPlot:辅助轴上的鼠标交互
QCustomPlot: mouse interaction on secondary axis
我有一个启用了所有 4 个轴并激活了这些交互的 QCustomPlot:
my_w.plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables);
现在通过在 xAxis
或 yAxis
上滑动我可以改变比例,但是当我在 xAxis2
或 yAxis2
上做同样的事情时什么也没有发生。
如何设置辅助轴上的交互?
编辑:
我发现了 setRangeDragAxes
和 setRangeZoomAxes
:
my_w.plot->axisRect()->setRangeDragAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
现在我可以 drag/and 缩放轴,几乎一切正常:拖动正常,但是当我用两根手指滑动缩放时,xAxis2
和 yAxis2
一起缩放.
您可以通过选择要缩放的轴并添加一个 mouseWheel 插槽来只进行一个轴缩放。
正在将鼠标滚轮信号连接到您的插槽:
connect(my_w.plot, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheel()));
实现鼠标滚轮槽:
void YourDialog::mouseWheel()
{
// if an axis is selected, only allow the direction of that axis to be zoomed
// if no axis is selected, both directions may be zoomed
if (my_w.plot->xAxis->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis,my_w.plot->yAxis);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->xAxis->orientation());
}
else if (my_w.plot->yAxis->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis,my_w.plot->yAxis);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->yAxis->orientation());
}
else if (my_w.plot->xAxis2->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->xAxis2->orientation());
}
else if (my_w.plot->yAxis2->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->yAxis2->orientation());
}
else
my_w.plot->axisRect()->setRangeZoom(Qt::Horizontal|Qt::Vertical);
}
如果您不想在选择 none 个轴时进行任何缩放,则可以将最后一种情况更改为 setRangeZoom(0)
。
查看 Interaction Example 了解更多选项。
我有一个启用了所有 4 个轴并激活了这些交互的 QCustomPlot:
my_w.plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables);
现在通过在 xAxis
或 yAxis
上滑动我可以改变比例,但是当我在 xAxis2
或 yAxis2
上做同样的事情时什么也没有发生。
如何设置辅助轴上的交互?
编辑:
我发现了 setRangeDragAxes
和 setRangeZoomAxes
:
my_w.plot->axisRect()->setRangeDragAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
现在我可以 drag/and 缩放轴,几乎一切正常:拖动正常,但是当我用两根手指滑动缩放时,xAxis2
和 yAxis2
一起缩放.
您可以通过选择要缩放的轴并添加一个 mouseWheel 插槽来只进行一个轴缩放。
正在将鼠标滚轮信号连接到您的插槽:
connect(my_w.plot, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheel()));
实现鼠标滚轮槽:
void YourDialog::mouseWheel()
{
// if an axis is selected, only allow the direction of that axis to be zoomed
// if no axis is selected, both directions may be zoomed
if (my_w.plot->xAxis->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis,my_w.plot->yAxis);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->xAxis->orientation());
}
else if (my_w.plot->yAxis->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis,my_w.plot->yAxis);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->yAxis->orientation());
}
else if (my_w.plot->xAxis2->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->xAxis2->orientation());
}
else if (my_w.plot->yAxis2->selectedParts().testFlag(QCPAxis::spAxis)){
my_w.plot->axisRect()->setRangeZoomAxes(my_w.plot->xAxis2,my_w.plot->yAxis2);
my_w.plot->axisRect()->setRangeZoom(my_w.plot->yAxis2->orientation());
}
else
my_w.plot->axisRect()->setRangeZoom(Qt::Horizontal|Qt::Vertical);
}
如果您不想在选择 none 个轴时进行任何缩放,则可以将最后一种情况更改为 setRangeZoom(0)
。
查看 Interaction Example 了解更多选项。