在用QChart来绘制自动化曲线QSplineSeries时,总是发现曲线显示不全。显示如下:
在网上搜索一番,后发现有朋友建议加上QMargins,结果还是不行。
代码如下:
QSplineSeries *series = new QSplineSeries();
series ->setVisible(true);
*series << QPointF(0.0, 0.0) << QPointF(30, 130) << QPointF(255, 255);
QChart *chart = new QChart();
chart->addSeries(series);
QMargins q;
q.setBottom(3);
chart->setMargins(q);
chart->createDefaultAxes();
// chart->axes(Qt::Horizontal).back()->setRange(-10, 255);
QChartView *chartView = new QChartView(chart);
chartView->resize(500, 500);
chartView->show();
解释一下代码:
QSplineSeries是可以自动化绘制曲线的点序列,往里面添加了三个点(0,0)、(30,130)、(255,255)曲线是一个向上凸出的弧线。调用QChart的addSeries将序列加到QChart中,然后再基于QChart创建一个QChartView,就可以用show函数将曲线显示出来。
其中setMargins是给QChart添加三个边缘间隙,createDefaultAxes是创建默认的坐标轴,因为QSplineSeries是继承于QXYSeries,所以这里创建的是QValueAxis类型坐标轴。
代码解释完毕。
解释原因:
这里坐标轴默认是从0开始,到曲线的最大值255,将横坐标改为从-10开始:
chart->axes(Qt::Horizontal).back()->setRange(-10, 255);
于是曲线完整的显示出来了:
这里是QSplineSeries绘制曲线的时候,曲线的一些点有负数了,导致默认坐标系显示不出来。
有朋友会问如果不加默认坐标轴会不会正常呢,试了一下也不会:
QSplineSeries是自动根据几个点绘制曲线,要研究下这些曲线的点是怎么计算出来的,是不是可以给一个范围限制不能包含负数。