Qt: Лучший способ реализовать «осциллографический» график в реальном времени

Я работаю над Gui-модулем для Qt для построения измерений в реальном времени, как в цифровом осциллографе, на основеQWT, Все работает до сих пор, как и должно, но, возможно, есть некоторые функции, которые нужно добавить ;-)

В данный момент данные хранятся по столбцам в QVectors вместе с одним глобальным QReector timeReference в одном отдельном QObject. Таким образом, данные могут быть отброшены построчно, чтобы сохранить только измерения в определенном прошлом. Все QVectors всегда имеют одинаковую длину. Затем полные данные можно выстроить в QwtPlot по строкам и по времени.

Я хочу больше инкапсулировать хранилище данных, чтобы быть более независимым от работы с измерениями. Поэтому было бы неплохо добавить отдельный список временных координат для каждого измерения и поместить их оба в отдельный объект QObject, который принимает и доставляет данные. Тогда будет 10 или 20 таких объектов QObject, по одному на каждый канал данных, которые будут отдельно нанесены перекрывающим QObject на QwtPlot.

Данные теперь могут быть динамически какими угодно - как данные хранятся, изменяются или отбрасываются между ними, не должны быть видны снаружи.

Мой вопрос: это умный? 20 или 30 объектов QO, содержащих каждые 10000 измерений, 10000 значений времени, а также отдельную область памяти аналогичного размера (динамически заполненную), где подмножество данных представлено для построения ...? Разумно ли принимать каждое измерение в своем объекте QObject в качестве сигнала с частотой около 1 кГц? Часть сигнал / слот основана на идее сделать каждый объект QThread позже и реализовать фильтрацию данных в реальном времени, например, нижний проход или БПФ, - поэтому соединения сигнал / слот удобны для управления выходом в многопоточная среда?

Как можно эффективно хранить данные в моих объектах? Я думаю о двух QList, один для времени и один для ценных данных. Затем выделение двух простых двойных массивов на лету для динамического доступа, чьи указатели вместе с длиной помещаются в структуру и возвращаются методом accessData (pastTime). Динамическая память заполняется комбинациями timeVal / измерения от «сейчас» до определенной точки в прошлом, устанавливаемой сигналом. Все хрупкое защищено мьютексами внутри QObject.

При отбрасывании старых значений необходимо искать в QList с самого начала первое значение, которое является достаточно молодым, чтобы его можно было сохранить, а те, которые находятся до этого индекса, выбрасываются. Является ли QMap умнее благодаря своей функции upperBound ()? Я полагаю, что скрытые накладные расходы не стоили бы того.

Как один профессионал попытается решить эту проблему красиво, эффективно или без каких-либо хлопот? Специальные Qt-особенности, о которых я должен знать? Или есть даже бесплатные решения? Во всяком случае, много текста для такого основного вопроса ... Спасибо за чтение здесь ;-)

заранее спасибо

Marvin

Эдит: внесла некоторые коррективы в аргументацию после комментариев Стийнса.

Ответы на вопрос(2)

Ваш ответ на вопрос