Как использовать QCustomPlot в режиме реального времени

QCustomPlot имеет функцию setData, которая принимает константную переменную. Есть ли способ QCustomPlot использовать для динамического построения графика? Функция QCustomPlot setData принимает постоянные векторы, но мне приходится динамически изменять значения в этом векторе.

const QVector<double> yval(cl);
const QVector<int> xval(cl);


for (int j = 0; j<cl; j++)
    yval[j] = ui->tableView->model()->data(ui->tableView->model()->index(5, j)).toDouble();
for (int j = 0; j<cl; j++)
{
    xval[j] = j;
}
ui->widget->graph()->setData(xval, yval);

person Schwab    schedule 27.04.2015    source источник
comment
Вы можете вызывать setdata каждый раз, когда ваши данные изменяются.   -  person Dmitry Sazonov    schedule 27.04.2015
comment
Я исправил отступ кода и закончил ваш вопрос знаком ?   -  person NathanOliver    schedule 29.04.2015


Ответы (2)


Вы можете использовать QCPGraph::data(). В документации QCustomPlot говорится, что:

Возвращает указатель на внутреннее хранилище данных типа QCPDataMap. Вы можете использовать его для прямого управления данными, что может быть удобнее и быстрее, чем использование обычных методов setData или addData в определенных ситуациях.

Вы можете манипулировать данными в QCustomPlot, например:

for(int i=0; i<count; i++)
    plot->graph()->data()[i] = y[i];
person Nejat    schedule 15.05.2015

Вы звоните setData() с новыми данными, затем customPlot()->replot()

Я использую его с таймером 50 мс, и он работает очень хорошо.

person AlexandreP    schedule 27.04.2015
comment
Приведенный выше код не работает, потому что функция setData() принимает setData(const double Vector key, const double Vector value); Я давал значения вектора int. и QT жаловался на то, что соответствующая функция не найдена, и правильно указывал - person Schwab; 28.04.2015