2

4 つの軸すべてを有効にし、これらの相互作用を有効にした QCustomPlot があります。

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

をスワイプするxAxisyAxis、スケールを変更できますが、同じことを繰り返してxAxis2yAxis2何も起こりません。

二次軸の相互作用を設定するにはどうすればよいですか?

編集:

私は発見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);

これで、軸をドラッグ/ズームできるようになりました。ほとんど問題ありません。ドラッグは問題なく機能しますが、2 本の指でスワイプしてズームすると、両方が一緒xAxis2yAxis2ズームされます。

4

1 に答える 1

1

ズームしたい軸を選択し、mouseWheel スロットを追加することで、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)どの軸も選択されていないときにズームを行いたくない場合は、最後のケースを に変更できます。

その他のオプションについては、相互作用の例をご覧ください。

于 2016-04-24T16:03:40.023 に答える