Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Lenidoxll от Февраль 21, 2021, 12:29



Название: QCustomPlot. Как сделать изменяющийся во времени график?
Отправлено: Lenidoxll от Февраль 21, 2021, 12:29
Добрый день!
Хочу реализовать график, который изменяет свой вид с течением времени. Так сказать, не статический, а динамический.
Пока что додумался до трех способов:
1. В классе есть вектор QVector<double> key, value. Каждый раз, когда срабатывает timeout таймера, вызывается слот, в котором к векторам через append добавляется новый элемент. При этом у нас есть только один график и он просто каждый раз перерисовывается. Таким образом, у нас график как бы ползет. Плюс этого способа, как мне кажется, это то, что то, что уже нарисовано, остается таким, какое оно есть и после перерисовки. Минус - затрата памяти и времени, ведь для этого постоянно приходится увеличивать массив элементов, то есть наши вектора.
2. У нас нет начальных вектором аргумента и значения, зато в слоте у нас создается каждый раз два новых вектора, состоящих из двух элементов - первый элемент это последний элемент в предыдущем вызове, а второй элемент - кончик новой части графика, так сказать, которая после отрисовки появится на экране. При этом эти вектора загружаются в каждый раз технически новый график. В итоге, реально график рисуется кусочно. Плюс, вроде как, что не приходится каждый раз меня размер массивов, минус - "ершистость" графика.
3. Создаем в классе два вектора на два значения (предположим, что мы рисует просто линейный график). Первое значение - реальная начальная точка. А второе значение всегда разное. Так как у нас график рисуется через прямые, проходящие через контрольные точки, за счет того, что вторая точка каждый раз разная, наш график визуально изменяется и вместе с тем не приходится меня размер массивов. Мы просто удаляем последний (второй) элемент и добавляем новый. Ну, и перерисовываем. Однако, во-первых, график как бы скочет туда сюда из-за таких перерисовок (совсем чуть-чуть, но все же), а во-вторых, оно так удобно пока функция линейная.

В связи с этим вопрос: как все-таки лучше рисовать графики изменяющиеся во времени, чтобы при этом был минимум затрат памяти и времени на перерисовку?

P.S.: если объяснено непонятно и надо выложить код - напишите в комменте. Изначально решил не выкладывать, чтобы не делать сообщение слишком большим.


Название: Re: QCustomPlot. Как сделать изменяющийся во времени график?
Отправлено: tux от Февраль 21, 2021, 13:15
Что-то типа осциллографа хотите?


Название: Re: QCustomPlot. Как сделать изменяющийся во времени график?
Отправлено: Igors от Февраль 22, 2021, 13:44
Написали много, но трудно понять что Вы хотите (цель)
Хочу реализовать график, который изменяет свой вид с течением времени. Так сказать, не статический, а динамический.
Может нужно просто "мониторить сигнал", т.е. график движется влево (и дорисовывается справа) по мере поступления новых точек? Но это никак не согласуется  с пунктами 2 и 3. Тогда что? Не уловив этот ключевой момент я сразу же "поплыл" :)


Название: Re: QCustomPlot. Как сделать изменяющийся во времени график?
Отправлено: Lenidoxll от Март 18, 2021, 17:01
Лучше ответить поздно, чем никогда!

Конкретной цели не было, хотелось выслушать мнение других касательно оптимальных возможностей вывода графиков.
хороший вариант был дан тут: https://www.cyberforum.ru/qt/thread2786560.html (https://www.cyberforum.ru/qt/thread2786560.html), правда, как я понимаю, в таком случае нет доступа к самим данным, и если стереть график, то заново его уже не воссоздать.