2016-04-23 49 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瞭解更多選項。