Отображение только части QwtCurve в режиме реального времени

У меня есть 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++;
}

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() линии, чтобы увидеть, где он умирает.

Если это что-то из-за того, что данные слишком велики, вы можете удалить элементы с головы вашего вектора, прежде чем устанавливать вектор.

Надеюсь, это поможет.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]