我有一个QCustomPlot,启用了所有4个轴并激活了这些交互:
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);
现在我可以拖动/和缩放轴,以及它几乎可以做的一切:拖动工作正常,但当我用两根手指轻扫时,xAxis2
和yAxis2
一起缩放
答案 0 :(得分:1)
通过选择要缩放的轴并添加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);
}
如果您不想在未选择任何轴时进行任何缩放,则可以将最后一个案例更改为setRangeZoom(0)
。
请查看Interaction Example了解更多选项。