x 和y的数据是不断推送过来新的数据,随后需要进行绘制柱状图,利用Qvector保存收到的数据,并进行绘制,坐标轴等设定均已完成。构造函数里调用init来添加绘画,然后在收到数据后便调用此函数绘制图像
void Chart::init()
{
ui->Mychart->addGraph();
}
void Chart::appendBar()
{
QCPBars* bar1 = new QCPBars(ui->Mychart->xAxis2, ui->Mychart->yAxis);
ui->Mychart->removeGraph(0);
QVector<double> x(1),y(1);
x[0] =x_chart;
y[0] =y_chart;
bar1->setData(x,y);
ui->Mychart->replot();
}
运行后当柱状图就不断进行绘制,然而每次绘制都在前一次的绘制基础上再次进行,从而导致当x值与之前相等但y值不相等时,柱状体像便签本一样一张一张往上贴,不断堆叠在了一起。
x_chart和y_chart 是每一次收到的数据。理想中在因为QVector设置了容量大小为1,因此只应该有一个数据量因此就取用x和y的第0个值,所以本以为每次绘制只有一个柱状体。然后本以为是未清除图像导致的,然而调用removegraph后依旧无效。
每次收到数据绘制一张,但一旦x值相等图片不能叠在一起。
你使用qcustomplot来进行绘制的话。
ui->Mychart->removeGraph(0); 你这句话是删除了图层。
在你绘制开始之前,应该先addgraphic
还有这个bid1->setData(x,y);
你这个是一直没有删除的
你应该这样写。
如果你是想有新的来就把旧的删除掉。
ui->Mychart->removeGraph(0);
QVector<double> x(1),y(1);
x[0] =x_chart;
y[0] =y_chart;
ui->Mychart->addGraphic()
ui->Mychart->graphic(0)->setData(x,y);
ui->Mychart->replot();