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)
если вы не хотите делать масштабирование, когда ни одна из осей не выбрана.
Взгляните на Пример взаимодействия для получения дополнительной информации.