Реализация скользящего 2D-графика в реальном времени в Qt

Я получаю потоковые данные измерений от ультразвукового устройства, движущегося внутри трубопровода, и хочу построить скользящий график этих измерений в реальном времени. Ось Y будет представлять градиент на 360 градусов вокруг трубы, а ось X будет представлять положение по длине в миллиметрах. Другими словами, ось X будет обновляться и перемещаться с той же скоростью, что и сканер, пока поступают новые данные (около 40 Гц). Значение каждой координаты (x,y) представляет собой одно измерение, которое должно быть сопоставлено с цветом в палитре.

Я новичок в графике (системы и бэкэнд-парень), и я смотрел на QImage, QWT и QCustomPlot, но ни один из них, похоже, не решает проблему напрямую, без необходимости вручную создавать 2D-матрицу, рисовать ее в QImage и обновлять и сдвиньте координаты каждой точки данных и перерисуйте, чтобы переместить/прокрутить ее. QCustomplot делает это очень хорошо для графиков, но я не понимаю, как это можно применить к их картам цветов.

Приветствуются любые намеки на фреймворки или пакеты, предоставляющие примитивы (или виджеты) для такого рода сюжетов.


person larslars    schedule 03.04.2015    source источник


Ответы (1)


Это можно сделать с помощью Qwt. Хитрость заключается в создании оболочки вокруг данных серии, которая запускает повтор каждый раз, когда вы добавляете точку данных. Если вы хотите пофантазировать, вы можете добавить таймер, который удаляет старые данные из серии и запускает другой повтор.

См. примеры процессора, осциллографа и реального времени, поставляемые с исходным кодом Qwt. Они реализуют этот трюк.

person Tansir1    schedule 03.04.2015
comment
Спасибо! Попробуйте это и дайте вам знать, как это происходит. - person larslars; 05.04.2015
comment
На самом деле я нашел Qwt довольно сложным в использовании, но я реализовал использование базового QPainter для рисования матрицы QPixmaps, которая затем сдвигается при добавлении новых элементов и перерисовывается в paintEvents. - person larslars; 10.09.2015