Qt - ChartView : Отображение подвисает при частом обновлении графика. Оптимизации отрисовки

Реализовал в QML с помощью ChartView поведение осциллографа, график которого рисуется слева направо, а полотно перемещается справа налево. За это поведение отвечает следующий фрагмет кода

    for (auto point : data){
            auto y = yInDec * 0 + yInDec * point;
            if (y > _yCoordinates->max()) y = _yCoordinates->max();
            if (y < yInDec) y = yInDec;
            _xCoordinates->setMax(_xCoordinates->max() + 0.5);
            _xCoordinates->setMin(_xCoordinates->min() + 0.5);
            _line->append(_xCoordinates->max(), y);
    }

где _xCoordinates типа QValuesAxis, _line типа QXYSeries Эти объекты передаются из QML, поэтому там они представлены компонентами ValueAxis и LineSeries.

Проблема в том, что при большой частоте обновлений(при большом количестве добавляемых поинтов - от 100) графика(_line) окно подвисает. Попытался сгруппировать элементы через добавление в цикле в QList и после цикла в _line, но проблема сохранилась.

Подскажите, есть ли способ оптимизировать этот процесс? Думал над поддержкой виджета ChartView в C++ коде, убрав его из QML, но пока не знаю, будет ли в этом случае достаточная оптимизация.

На ютубе нашел видео: https://www.youtube.com/watch?v=Fclixzkv9C0. Там показан полный аналог того, чего я хочу добиться.

Подмечу, что при включении поддержки opengl в lineseries, зависания уменьшаются, но не сильно.


Ответы (1 шт):

Автор решения: Rafael F.

Проблему с подвисанием можно решить предотвратив вызов сигнала о добавлении для каждого поинта. Для этого нужно реализовать свою модель.

Пример можно найти в ответе на этот вопрос https://stackoverflow.com/questions/52320696/qchart-unresponsive-with-large-data-set

→ Ссылка