QCustomPlot в режиме реального времени в стиле ЭКГ

Я хочу построить график в реальном времени для построения данных с моего Arduino, и я хочу использовать следующую функцию из QCustomPlot для построения графика в стиле ЭКГ (начиная снова через несколько секунд и заменяя предыдущие данные):

void QCPGraph::addData(const QVector<double> &keys, const QVector<double> &values)`

с keys=time и values=data из последовательного порта.

У меня уже есть последовательные данные и непрерывный график, но я не знаю, как изменить это с помощью приведенной выше функции и сделать вектор времени.

Можете ли вы привести пример вызова этой функции?


person Ana    schedule 07.06.2016    source источник


Ответы (1)


Если я правильно понял, у вас есть график, на котором xAxis диапазон постоянен. Допустим, он определен как MAX_RANGE секунды, и вы хотите, чтобы после того, как он пройдет MAX_RANGE секунды, график очистится и начнется снова с 0 секунды.

Если все это верно, то я думаю, у вас уже есть функция, которую вы вызываете каждые T секунд, чтобы обновить график. Если нет, взгляните на этот пример.
Предположим, что вы уже есть функция, которую вы вызываете каждые T секунд:

void MyPlot::updatePlot(int yValue)

Затем просто добавьте timeCounter в качестве переменной класса, которая будет обновляться при каждом вызове. Затем добавьте оператор if, который проверит, прошел ли он MAX_RANGE. Если да, то очистите график с помощью clearData(), добавьте новое значение и сбросьте timeCounter . Если это не так, просто добавьте новое значение. Простой пример (просто внесите изменения, соответствующие вашему случаю):

void MyPlot::updatePlot(int yValue){
    this->timeCounter += T;
    if (this->timeCounter >= MAX_RANGE) {
        ui->customPlot->graph(0)->clearData();
        ui->customPlot->graph(0)->addData(0, yValue);
        this->timeCounter = 0;
    }
    else {
        ui->customPlot->graph(0)->addData(this->timeCounter, yValue);
    }
}
person A. Sarid    schedule 08.06.2016
comment
Это именно тот пример, который я использую. Я постараюсь изменить его с тем, что вы мне сказали, спасибо! - person Ana; 08.06.2016
comment
Если это помогло вам решить вашу проблему, примите его как правильный ответ, нажав на значок V рядом с моим ответом. - person A. Sarid; 08.06.2016
comment
Я не знаю, где T в этом примере - person Ana; 08.06.2016
comment
Если вы вызываете свою функцию, используя QTimer. Затем T определяется как время, когда вы устанавливаете таймер для тайм-аута. Например, dataTimer.start(T). - person A. Sarid; 09.06.2016