Russian Qt Forum
Ноябрь 22, 2024, 01:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QCustomPlot. Как сделать изменяющийся во времени график?  (Прочитано 4715 раз)
Lenidoxll
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« : Февраль 21, 2021, 12:29 »

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

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

P.S.: если объяснено непонятно и надо выложить код - напишите в комменте. Изначально решил не выкладывать, чтобы не делать сообщение слишком большим.
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #1 : Февраль 21, 2021, 13:15 »

Что-то типа осциллографа хотите?
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Февраль 22, 2021, 13:44 »

Написали много, но трудно понять что Вы хотите (цель)
Хочу реализовать график, который изменяет свой вид с течением времени. Так сказать, не статический, а динамический.
Может нужно просто "мониторить сигнал", т.е. график движется влево (и дорисовывается справа) по мере поступления новых точек? Но это никак не согласуется  с пунктами 2 и 3. Тогда что? Не уловив этот ключевой момент я сразу же "поплыл" Улыбающийся
Записан
Lenidoxll
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #3 : Март 18, 2021, 17:01 »

Лучше ответить поздно, чем никогда!

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


Страница сгенерирована за 0.113 секунд. Запросов: 22.