В моем приложении я использую QChart
для отображения линейного графика. К сожалению, Qt Charts не поддерживает такие базовые функции, как масштабирование колесиком мыши и прокрутка мышью. Да, есть функция RubberBand, но она по-прежнему не поддерживает прокрутку и т. д., что не так интуитивно понятно для пользователей. Также мне нужно масштабировать только ось X, что-то вроде setRubberBand(QChartView::HorizontalRubberBand)
, но с помощью колесика мыши. До сих пор, после погружения в QChartView
, я использовал следующий обходной путь:
class ChartView : public QChartView {
protected:
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
{
QRectF rect = chart()->plotArea();
if(event->angleDelta().y() > 0)
{
rect.setX(rect.x() + rect.width() / 4);
rect.setWidth(rect.width() / 2);
}
else
{
qreal adjustment = rect.width() / 2;
rect.adjust(-adjustment, 0, adjustment, 0);
}
chart()->zoomIn(rect);
event->accept();
QChartView::wheelEvent(event);
}
}
Это работает, но увеличение, а затем уменьшение масштаба не приводит к тому же результату. Есть небольшое отклонение. После отладки я обнаружил, что chart()->plotArea()
всегда возвращает один и тот же прямоугольник, поэтому этот обходной путь бесполезен.
Есть ли способ получить только видимую область? Или, может быть, кто-нибудь может указать мне правильное решение, как масштабировать/прокручивать мышью для QChartView?