Qt: La mejor manera de implementar el trazado en tiempo real "similar al osciloscopio"

Estoy trabajando en un módulo Gui para Qt para trazar mediciones en tiempo real como en un osciloscopio digital, basado enQwt. Todo funciona tan bien como debería, pero quizás quedan algunas características por agregar ;-)

Por el momento, los datos se almacenan en columnas en QVectors, junto con un QVector de referencia de tiempo global en un QObject separado. Por lo tanto, los datos se pueden descartar en filas para mantener solo Meusurement hasta cierto pasado. Todos los QVectors siempre tienen la misma longitud. Los datos completos pueden entonces ser graficados correctamente en el tiempo en una QwtPlot.

Quiero encapsular más el almacenamiento de datos, para ser más independiente al trabajar con las mediciones. Por lo tanto, sería bueno agregar una Lista separada de coordenadas de tiempo para cada medición y colocarlas en un QObject separado, que acepte y elimine los datos. Entonces habría 10 o 20 de tales QObjects, uno para cada canal de datos, que se grafican por separado por un QObject suprayacente en el QwtPlot.

Los datos ahora pueden ser dinámicamente lo que sea: la forma en que se almacenan, alteran o descartan en el medio no debe ser visible desde el exterior.

Mi pregunta es: ¿es inteligente? ¿20 o 30 QObjects que contienen cada 10000 mediciones, 10000 valores de tiempo, más una región de memoria separada de tamaño similar (llena dinámicamente) donde se presenta un subconjunto ob los datos para el trazado ...? ¿Es sensato recibir cada medida en su QObject como señal, disparando a alrededor de 1 kHz? La parte de señal / ranura proviene de la idea de hacer que cada objeto sea un QThread más tarde e implementar un filtrado en tiempo real, como paso bajo o FFT en los datos; por lo tanto, las conexiones de señal / ranura son útiles para controlar la salida en un entorno multiproceso?

¿Cómo podrían almacenarse los datos de manera eficiente dentro de mis objetos? Estoy pensando en dos QList, una para el tiempo y otra para datos valiosos. Luego, asigne dos matrices dobles simples sobre la marcha para el acceso dinámico, cuyos punteros junto con la longitud se colocan en una estructura y se devuelven mediante un método accessData (pastTime). La memoria dinámica se llena con las combinaciones timeVal / medición desde "ahora" hasta un cierto punto en el pasado, configurable por una señal. Todo lo frágil asegurado por mutexes dentro del QObject.

Al descartar los valores antiguos, se debe buscar en la QList desde el principio el primer valor que sea lo suficientemente joven como para mantenerse, los que residen antes de este índice se descartan. ¿Es un QMap más inteligente debido a su función upperBound ()? Me imagino que la sobrecarga oculta no valdría la pena.

¿Cómo trataría un profesional de resolver este problema de manera agradable, eficiente o sin problemas? Características especiales de Qt que debo conocer ¿O incluso hay soluciones gratuitas por ahí? De todos modos, mucho texto para una pregunta tan básica ... Gracias por leer hasta aquí ;-)

Gracias por adelantado

Marvin

edith: hizo una limpieza en la argumentación después de los comentarios de stijns.