我有一个QVector,我不断附加数据,所以我可以在QwtPlot上绘图。但是频率很高,我猜测矢量太大而程序崩溃了。
我的问题是,如何创建一个仅在某个时间点开始的QwtCurve,因为已经绘制的矢量中没有必要已经过去的时间。
这是我的代码:
QVector<double> xv;
QVector<double> cv1;
QVector<double> cv2;
作为全局变量,
void gui::process_new_info(QByteArray array)
{
int v = 0;
double f = ui->frequency->value();
xv.append(sizeof_array/f);
char *buf = array.data();
if (ui->ecgPlux->isChecked() == true || ui->channel_1->currentIndex() != 0)
{
cv1.append(buf[1]);
QwtPlotCurve *curve1 = new QwtPlotCurve;
curve1->attach(plot_all[0]);
curve1->setData(xv,cv1);
curve1->setPen(QPen(Qt::blue,1));
plot_all[0]->replot();
QwtPlotCurve *curve2 = new QwtPlotCurve;
curve2->attach(plot[0]);
curve2->setData(xv,cv1);
curve2->setPen(QPen(Qt::blue,1));
plot[0]->replot();
}
if (ui->xyzPlux->isChecked() == true || ui->channel_2->currentIndex() != 0)
{
cv2.append(buf[2]);
QwtPlotCurve *curve3 = new QwtPlotCurve;
curve3->attach(plot_all[1]);
curve3->setData(xv,cv2);
curve3->setPen(QPen(Qt::blue,1));
plot_all[0]->replot();
QwtPlotCurve *curve4 = new QwtPlotCurve;
curve4->attach(plot[1]);
curve4->setData(xv,cv1);
curve4->setPen(QPen(Qt::blue,1));
plot[1]->replot();
}
//printf ("%d ->", buf[0]);
fprintf (data, "%d,", buf[0]);
for (int i = 1; i < 9; i++)
{
v = buf[i];
//printf ("%d,", v);
fprintf (data, "%d,", v);
}
//printf ("\n");
fprintf (data, "\n");
sizeof_array++;
}
答案 0 :(得分:2)
QwtPlotCurve
http://qwt.sourceforge.net/class_qwt_plot_curve.html
继承自QwtPlotSeriesItem
http://qwt.sourceforge.net/class_qwt_plot_series_item.html
setData
该项目取得数据对象的所有权,在不再使用时将其删除。
可能不是你的成长太大......可能是你正在访问Qwt删除的东西。
在调试器中运行它,查看堆栈跟踪中的死亡位置,或者放入一堆qDebug()
行以查看它的死亡位置。
如果数据太大,您可以在设置矢量之前弹出矢量头部的项目。
希望有所帮助。