2016-04-23 9 views
2

У меня есть QCustomPlot с включенным все 4 оси и эти взаимодействия активированного:QCustomPlot: взаимодействие мыши на вторичной оси

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

Теперь, проводя на xAxis или yAxis можно изменить масштаб, но когда я сделать то же самое за xAxis2 или yAxis2 ничего не происходит.

Как установить взаимодействие по вторичным осям?

EDIT:

Я обнаружил 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 увеличить вместе.

ответ

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 для получения дополнительных возможностей.

Смежные вопросы