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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qwt: Как добавить одну точку на график?  (Прочитано 7549 раз)
Joilo
Гость
« : Июль 12, 2011, 15:32 »

Добрый день!
Задача такая, что интегратор через некоторые промежутки времени выдаёт значения, которые сразу надо отображать на графике. В массив значения добавлять, а потом выводить его на грфик не вариант, потому что время интегрирования может быть достаточно большое. В следствии возникает вопрос: как добавлять точку (Time, X) на график в Qwt в каждый момент времени Time?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июль 12, 2011, 15:56 »

Задача такая, что интегратор через некоторые промежутки времени выдаёт значения, которые сразу надо отображать на графике. В массив значения добавлять, а потом выводить его на грфик не вариант, потому что время интегрирования может быть достаточно большое. В следствии возникает вопрос: как добавлять точку (Time, X) на график в Qwt в каждый момент времени Time?
Судя по тому что Вы рассказали - у Вас классический случай использования нитки (потока) которая решает конкретную задачу (интегрирование).  Примерный сценарий

- заводится нитка (QThread). Появившаяся новая точка скармливается этой нитке которая занимается интегрированием. Если (еще) новая точка пришла до окончания интегрирования - оно должно быть прервано и (пере)запущено уже с учетом новых точек

- когда все пришедшие данные отработаны, интегрирующая нитка посылает сигнал главной, мол "готово, перерисуй (обнови) UI"

 
Записан
Joilo
Гость
« Ответ #2 : Июль 12, 2011, 16:21 »

Igors, спасибо большое за алгоритм,
и такой вот ещё банальный вопрос: как к имеющемуся графику добавить одну единственную точку? Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июль 12, 2011, 17:03 »

и такой вот ещё банальный вопрос: как к имеющемуся графику добавить одну единственную точку? Улыбающийся
Ну этого я не знаю Улыбающийся Если Вы имеете ввиду UI - то никак, потому что (опять-таки исходя из того что Вы рассказали) точки приходят асинхронно. Поэтому придется каждый раз перерисовывать  весь график (не беда). А с точки зрения "интегрирующего" - ну вставил точку в контейнер (std::vector или др. у Вас) - и пошел считать
Записан
Joilo
Гость
« Ответ #4 : Июль 13, 2011, 08:03 »

Igors, спасибо большое за ответ. Теперь стало ясно.
Записан
Joilo
Гость
« Ответ #5 : Июль 13, 2011, 09:24 »

Ещё такой вопрос возник: как можно отобразить график с помощью отдельных точек, не соединённых между собой линией? Получаемый график с разрывами, и если отрисовывать с помощью QwtPlotCurve то в местах разрыва рисутеся вертикальная линия.
Помогите с решением.
Записан
madRoger
Гость
« Ответ #6 : Июль 13, 2011, 12:01 »

Цитировать
как можно отобразить график с помощью отдельных точек, не соединённых между собой линией?

Код:
QwtPlotCurve::setStyle(QwtPlotCurve::Dots)
Записан
Joilo
Гость
« Ответ #7 : Июль 16, 2011, 20:31 »

madRoger, спасибо!
Записан
climber
Гость
« Ответ #8 : Июль 18, 2011, 09:43 »

По поводу добавления одной точки. Обратите взор на пример из qwt cpuplot. Там показано как раз в секунду добавлять точку на график. Безусловно интервал отображения меняете на любой, даже асинхронный. Для этого, как вам советовали выше, в потоке вычислете значение точки (x,y) и по сигналу от потока finished() передаете данные в обработчик события, в котором происходит отрисовка точки. Я реализовывал алгоритм в котором с интервалом 1 сек. с сервера считывается массив данных(около 10 тыс. сигналов), который нужно отображать в реальном времени (до 12 графиков на курве) на графике. Все работает без тупняков.
Записан
Joilo
Гость
« Ответ #9 : Июль 18, 2011, 10:15 »

climber, спасибо за совет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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