QCustomPlot: взаимодействие мыши на вторичной оси

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

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

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

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

РЕДАКТИРОВАТЬ:

Я обнаружил 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) если вы не хотите делать масштабирование, когда ни одна из осей не выбрана.

Взгляните на Пример взаимодействия для получения дополнительной информации.

Другие вопросы по тегам