У меня есть 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++;
}
QwtPlotCurve
http://qwt.sourceforge.net/class_qwt_plot_curve.html
наследуется от QwtPlotSeriesItem
http://qwt.sourceforge.net/class_qwt_plot_series_item.html
Есть предупреждение в setData
Элемент становится владельцем объекта данных, удаляя его, когда он больше не используется.
Вероятно, это не факт, что вы становитесь слишком большими … возможно, вы получаете доступ к тому, что удалил Qwt.
Запустите его в отладчике и посмотрите на трассировку стека, где он умер, или поместите в кучу qDebug()
линии, чтобы увидеть, где он умирает.
Если это что-то из-за того, что данные слишком велики, вы можете удалить элементы с головы вашего вектора, прежде чем устанавливать вектор.
Надеюсь, это поможет.
Других решений пока нет …