0

我正在学习 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();

一开始,我的图表如下所示: 开始时

放大时,我调用图表的“zoomin”方法:

chart->zoomIn();

但是该行会“超出视图的可见区域”,如下所示:

放大

我希望它看起来像这样: 向上滚动

所以,我调用了图表的滚动方法:

chart->scroll( 0, -50 );

但它显然不能应用在我的产品程序中,因为:

  1. 我不想多次“重绘”,因为我相信在对axisY->setRange和chart->zoom、chart->scroll等的任何调用之后,图表都会被重绘……
  2. 我应该如何找出axisY->setRange的参数来调整它?我查看了 QLineSeries/QChart/QValue/QChartView 的成员,但没有找到计算 Y 轴新最大值/最小值的方法。

我相信一定有一种方法可以解决我的问题,但我不知道。谢谢!对不起我的英语不好。

4

0 回答 0