2016-04-23 77 views
2

鼠标交互我有一个QCustomPlot启用所有的4个轴,并与这些相互作用激活:QCustomPlot:上次级轴

my_w.plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables); 

现在通过滑动上的xAxisyAxis我可以改变规模,但我当在xAxis2yAxis2上做同样的事情没有任何反应。

如何在辅助轴上设置交互?

编辑:

我发现setRangeDragAxessetRangeZoomAxes

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); 

现在我可以拖动/和缩放轴,和一切它几乎确定:拖动工作正常,但是当我放大通过刷用两个手指,xAxis2yAxis2放大在一起。

回答

1

通过选择想要缩放的轴并添加鼠标滚轮槽,您只能进行一个轴缩放。

连接鼠标滚轮信号到你的插槽:

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了解更多选项。