在用QSplineSeries来进行曲线的绘制的时候,如果两次相邻的数据在坐标系内相差过大的话会出现下图的情况
而值的变化只是由-35到-55再到-75而已
添加数据的代码如下:
void setData(std::map<int, double> data) {
QSplineSeries *series = new QSplineSeries(m_chart);
double min = data.begin()->second;
double max = data.begin()->second;
for (auto m : data) {
*series << QPointF(m.first, m.second);
std::cout << "value = " << m.second << std::endl;
if (min > m.second)
min = m.second;
if (max < m.second)
max = m.second;
}
m_chart->addSeries(series);
m_chart->legend()->setVisible(false);
m_chart->createDefaultAxes();
m_chart->axes(Qt::Horizontal).first()->setRange(0, int(data.size()));
m_chart->axes(Qt::Vertical).first()->setRange(min - 10, max + 10);
}
这个绘制的效果和QPainterPath的cubicTo函数计算出来的曲线很像,应该是数据在变化的时候会通过一定的曲线计算来生成对应的曲线,这里如果有懂的朋友麻烦讲解一下,非常感谢
在没有找到该问题的解决办法后,目前只能把QSplineSeries换成QLineSeries,虽然曲线不够平滑,但是起码准确