Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Joilo от Июль 12, 2011, 15:32



Название: Qwt: Как добавить одну точку на график?
Отправлено: Joilo от Июль 12, 2011, 15:32
Добрый день!
Задача такая, что интегратор через некоторые промежутки времени выдаёт значения, которые сразу надо отображать на графике. В массив значения добавлять, а потом выводить его на грфик не вариант, потому что время интегрирования может быть достаточно большое. В следствии возникает вопрос: как добавлять точку (Time, X) на график в Qwt в каждый момент времени Time?


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

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

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

 


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: Joilo от Июль 12, 2011, 16:21
Igors, спасибо большое за алгоритм,
и такой вот ещё банальный вопрос: как к имеющемуся графику добавить одну единственную точку? :)


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: Igors от Июль 12, 2011, 17:03
и такой вот ещё банальный вопрос: как к имеющемуся графику добавить одну единственную точку? :)
Ну этого я не знаю :) Если Вы имеете ввиду UI - то никак, потому что (опять-таки исходя из того что Вы рассказали) точки приходят асинхронно. Поэтому придется каждый раз перерисовывать  весь график (не беда). А с точки зрения "интегрирующего" - ну вставил точку в контейнер (std::vector или др. у Вас) - и пошел считать


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: Joilo от Июль 13, 2011, 08:03
Igors, спасибо большое за ответ. Теперь стало ясно.


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: Joilo от Июль 13, 2011, 09:24
Ещё такой вопрос возник: как можно отобразить график с помощью отдельных точек, не соединённых между собой линией? Получаемый график с разрывами, и если отрисовывать с помощью QwtPlotCurve то в местах разрыва рисутеся вертикальная линия.
Помогите с решением.


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: madRoger от Июль 13, 2011, 12:01
Цитировать
как можно отобразить график с помощью отдельных точек, не соединённых между собой линией?

Код:
QwtPlotCurve::setStyle(QwtPlotCurve::Dots)


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: Joilo от Июль 16, 2011, 20:31
madRoger, спасибо!


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: climber от Июль 18, 2011, 09:43
По поводу добавления одной точки. Обратите взор на пример из qwt cpuplot. Там показано как раз в секунду добавлять точку на график. Безусловно интервал отображения меняете на любой, даже асинхронный. Для этого, как вам советовали выше, в потоке вычислете значение точки (x,y) и по сигналу от потока finished() передаете данные в обработчик события, в котором происходит отрисовка точки. Я реализовывал алгоритм в котором с интервалом 1 сек. с сервера считывается массив данных(около 10 тыс. сигналов), который нужно отображать в реальном времени (до 12 графиков на курве) на графике. Все работает без тупняков.


Название: Re: Qwt: Как добавить одну точку на график?
Отправлено: Joilo от Июль 18, 2011, 10:15
climber, спасибо за совет.