Я работаю над Gui-модулем для Qt для построения измерений в реальном времени, как в цифровом осциллографе, на основе Qwt .Все работает так, как и должно, но, возможно, осталось добавить некоторые функции; -)
В данный момент данные хранятся по столбцам в QVectors вместе с одним глобальным QReector timeReference в одном отдельном QObject.Таким образом, данные могут быть отброшены построчно, чтобы сохранить только измерения в определенном прошлом.Все QVectors всегда имеют одинаковую длину.Затем полные данные можно выстроить в QwtPlot по строкам и по времени.
Я хочу больше инкапсулировать хранилище данных, чтобы быть более независимым от работы с измерениями.Поэтому было бы неплохо добавить отдельный список временных координат для каждого измерения и поместить их оба в отдельный объект QObject, который принимает и доставляет данные.Тогда было бы 10 или 20 таких объектов QObject, по одному на каждый канал данных, которые отдельно наносятся перекрывающим QObject на QwtPlot.
Теперь данные могут быть динамически какими угодно - как данные хранятся, измененные или выброшенные между ними не должны быть видны снаружи.
Мой вопрос: это умный?20 или 30 объектов QO, содержащих каждые 10000 измерений, 10000 значений времени, а также отдельную область памяти аналогичного размера (динамически заполненную), где подмножество данных представлено для построения ...?Разумно ли принимать каждое измерение в своем объекте QObject в качестве сигнала с частотой около 1 кГц?Часть сигнал / слот основана на идее сделать каждый объект QThread позже и реализовать фильтрацию данных в реальном времени, например, нижний проход или БПФ, - поэтому соединения сигнал / слот удобны для управления выходом вмногопоточная среда?
Как эффективно хранить данные внутри моих объектов OB?Я думаю о двух QList, один для времени и один для ценных данных.Затем выделение двух простых двойных массивов на лету для динамического доступа, чьи указатели вместе с длиной помещаются в структуру и возвращаются методом accessData (pastTime).Динамическая память заполняется комбинациями timeVal / измерения от «сейчас» до определенной точки в прошлом, устанавливаемой сигналом.Все хрупкое, защищенное мьютексами внутри объекта QObject.
При отбрасывании старых значений необходимо искать в QList с самого начала первое значение, которое достаточно молодо, чтобы его сохранить, те, которые находятся перед этим индексом, выбрасываются,Является ли QMap умнее благодаря своей функции upperBound ()?Я полагаю, что скрытые накладные расходы не будут стоить.
Как один профессионал попытается решить эту проблему красиво, эффективно или без каких-либо хлопот?Специальные Qt-особенности, о которых я должен знать?Или есть даже бесплатные решения?Во всяком случае, много текста для такого основного вопроса ... Спасибо, что прочитали здесь; -)
Заранее спасибо
Марвин
Эдит: сделал некоторые очистки в аргументациипосле стайнс комментариев.