Как автоматически прокрутить (настроить) ось-Y после QChart :: zoom? - PullRequest
0 голосов
/ 17 января 2020

Я изучаю QtCharts. Мне нужно увеличить масштаб диаграммы и соответственно отрегулировать диапазон оси Y, чтобы сделать полностью видимой логически видимую часть линии в реальной видимой области ChartView.

Например, :

auto chart = new QtCharts::QChart;
auto lines = new QtCharts::QLineSeries;
QDateTime dt = QDateTime::currentDateTime();
for( int i = 0; i < 100; ++i ) {
   lines->append( dt.toMSecsSinceEpoch(), std::pow( i, 2 ) );
   dt = dt.addMSecs( 500 );
}
chart->addSeries( lines );

auto axisX = new QtCharts::QDateTimeAxis( chart );
axisX->setTickCount( 13 );
axisX->setFormat( "ss.zzz" );
chart->addAxis( axisX, Qt::AlignBottom );
lines->attachAxis( axisX );

auto axisY = new QtCharts::QValueAxis( chart );
axisY->setLabelFormat( "%i" );
chart->addAxis( axisY, Qt::AlignLeft );
lines->attachAxis( axisY );

auto cv = new QtCharts::QChartView( chart );
setCentralWidget( cv );
resize( 800, 600 );
cv->show();

В начале мой график выглядит так: AtBeginning

При увеличении я называю метод диаграммы "zoomin":

chart->zoomIn();

Но линия "выходит из видимой области просмотра", например:

Zoomed

Я хочу, чтобы это выглядело вот так: Scrolled up

Итак, я вызвал метод прокрутки диаграммы:

chart->scroll( 0, -50 );

Но, очевидно, он не может быть применен в моей программе продукта, как:

  1. Я не хочу «перерисовывать» несколько раз, так как я верю, что диаграмма будет перекрашиваться после любых вызовов к axisY-> setRange и chart-> zoom, и chart-> scroll, и так далее ...
  2. Как мне указать аргументы оси Y-> setRange, чтобы настроить его? Я просмотрел элементы QLineSeries / QChart / QValue / QChartView, но не нашел способа вычислить новое максимальное / минимальное значение оси-Y.

Я считаю, что метод может решить мою проблему, но я не знаю. Спасибо! Извините за мой бедный Энгли sh.

...