Qt: Melhor maneira de implementar plotagem em tempo real “tipo osciloscópio”

Estou trabalhando em um módulo Gui para Qt para plotar medidas em tempo real, como em um osciloscópio digital, com base emQwt. Tudo funciona tão longe quanto deveria, mas talvez ainda haja alguns recursos a serem adicionados ;-)

No momento em que os dados são armazenados em colunas no QVectors, junto com um timeReference QVector global em um QObject separado. Portanto, os dados podem ser descartados em linhas para manter apenas o Meusurement até um determinado passado. Todos os QVectors sempre têm o mesmo comprimento. Os dados completos podem ser plotados corretamente no tempo, em linhas, em um QwtPlot.

Quero encapsular mais o armazenamento de dados, para ser mais independente no trabalho com as medições. Portanto, seria bom adicionar uma lista separada de coordenadas de tempo para cada medição e colocá-las em um QObject separado, que aceita e obtém os dados. Haveria 10 ou 20 desses QObjects, um para cada canal de dados, que são plotados separadamente por um QObject sobreposto no QwtPlot.

Os dados agora podem ser dinamicamente, seja como for - como os dados são armazenados, alterados ou descartados entre eles não devem ser visíveis para o exterior.

Minha pergunta é: isso é inteligente? 20 ou 30 QObjects contendo cada 10000 medições, 10000 valores temporais, além de uma região de memória separada de tamanho semelhante (preenchido dinamicamente) onde um subconjunto dos dados é apresentado para plotagem ...? É sensato receber cada medida em seu QObject como um sinal, disparando em torno de 1kHz? A parte do sinal / slot vem da idéia de tornar cada OBject um QThread mais tarde e implementar a filtragem em tempo real, como passa-baixa ou FFT nos dados - portanto, as conexões de sinal / slot são úteis para controlar a saída em um ambiente multithread?

Como os dados podem ser armazenados eficientemente dentro dos meus objetos? Estou pensando em duas QList, uma para o tempo e outra para dados preciosos. Em seguida, aloque duas matrizes duplas simples em tempo real para acesso dinâmico, cujos ponteiros, juntamente com o comprimento, são colocados em uma estrutura e retornados por um método accessData (pastTime). A memória dinâmica é preenchida com as combinações timeVal / medição do "agora" até um determinado ponto no passado, configurável por um sinal. Tudo frágil protegido por mutexes dentro do QObject.

Ao descartar valores antigos, a QList deve ser pesquisada desde o início pelo primeiro valor que seja jovem o suficiente para ser mantido, os que residem antes que esse índice seja descartado. Um QMap é mais inteligente devido à sua função upperBound ()? Eu acho que a sobrecarga escondida não valeria a pena.

Como um profissional tentaria resolver esse problema de maneira agradável, eficiente ou sem problemas? Recursos especiais de Qt que devo conhecer? Ou existem soluções gratuitas por aí? De qualquer forma, muito texto para uma pergunta tão básica ... Obrigado por ler até aqui ;-)

desde já, obrigado

Marvin

edith: limpou a argumentação depois de comentar os comentários.

questionAnswers(2)

yourAnswerToTheQuestion