2016-04-23 8 views
2

Ich habe eine QCustomPlot mit allen 4 Achsen aktiviert und mit diesen Wechselwirkungen aktiviert:QCustomPlot: Maus Interaktion auf Sekundärachse

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

Jetzt auf einem xAxis oder yAxis durch Streich I das Ausmaß ändern kann, aber wenn ich mach dasselbe über xAxis2 oder yAxis2 passiert nichts.

Wie stelle ich die Interaktion über die sekundären Achsen ein?

EDIT:

ich entdeckt habe setRangeDragAxes und 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); 

jetzt kann ich ziehen/und Zoom-Achsen, und alles, was es ist fast ok: Drag funktioniert ok, aber wenn ich zoomen, indem swiping Mit zwei Fingern können beide xAxis2 und yAxis2 zusammen zoomen.

Antwort

1

Sie können nur einen Achsenzoom machen, indem Sie die zu vergrößernde Achse auswählen und einen mouseWheel-Steckplatz hinzufügen.

Connecting Mausrad-Signal an den Schlitz:

connect(my_w.plot, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheel())); 

Mausrad Schlitz Implement:

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

Sie können den letzten Fall setRangeZoom(0) ändern, wenn Sie, wenn keine Zoom machen wollen keine der Achsen ist ausgewählt.

Werfen Sie einen Blick auf die Interaction Example für weitere Optionen.