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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Три вопроса про Qwt  (Прочитано 8895 раз)
arttr
Гость
« : Март 19, 2012, 09:51 »

Здравствуйте!

1. Не отображается легенда на графике. Делаю так:
Код:
    legend = new QwtLegend();
    legend->setItemMode(QwtLegend::ReadOnlyItem);
    ui->plot->insertLegend(legend, QwtPlot::TopLegend);
затем кривые создаю так:
Код:
    //создаем кривую 1, назначаем цвет прорисовки - синий
    curve1 = new QwtPlotCurve(QString("RTK1"));
    curve1->setPen(QPen(Qt::blue));
    //точку будем отмечать маркером, стиль эллипс, цвет синий, размер 5, прикрепляем к кривой
    symbol1 = new QwtSymbol;
    symbol1->setStyle(QwtSymbol::Ellipse);
    symbol1->setPen(QColor(Qt::blue));
    symbol1->setSize(5);
    curve1->setSymbol(symbol1);
Ожидаю, что над графиком появится легенда, но этого не происходит. В чем может быть причина?

2. Второй вопрос более интересный. В слоте обработчика окна получаю координаты точек в реальном времени, которые надо отобразить на графике. Можно ли сделать так, чтобы не хранить весь массив точек, чтобы когда приходит новая перерисовать все. Желательно сделать так, чтобы по приходу новой точки, дорисовать только её.

3. Подскажите, каким образом можно установить границы осей и при этом сохранить автомаштабирование? Более подробно: хочу задать границу осей скажем от 0 до 180 по Х и от 0 до 90 по Y, а когда придет координата точки (50.30, 61.65), график автоматом отмаштабировался до (45, 55) по X и (55, 65) по Y, к примеру, т.е. чтобы было комфортно лицезреть эти точки. Или лучше зум руками делать?

Заранее благодарен!
« Последнее редактирование: Март 19, 2012, 14:16 от arttr » Записан
arttr
Гость
« Ответ #1 : Март 19, 2012, 17:44 »

Ответ на первый вопрос: забыл дописать
Код:
curve1->attach(ui->plot);

Ответ на третий вопрос: после setAxisScale автомасштабирование отключается, поэтому его нужно заново включить
Код:
ui->plot->setAxisAutoScale(QwtPlot::xBottom, true);

Второй вопрос по-прежнему остается открытым и очень актуальным!!!
« Последнее редактирование: Март 19, 2012, 17:51 от arttr » Записан
FricGeger
Гость
« Ответ #2 : Март 19, 2012, 17:57 »

По поводу второго вопроса советую посмотреть пример oscilloscope, там как раз происходит дорисовка точек.
у QwtPlotDirectPainter ест метод drawSeries который может дорисовать точки
Что плохого в том чтобы хранить масив точек?
Записан
arttr
Гость
« Ответ #3 : Март 19, 2012, 18:29 »

Цитировать
Что плохого в том чтобы хранить масив точек?

В секунду приходят минимум 9 точек, 3 из которых нужно отрисовать каждую на своей кривой. Далее еще на других графиках отрисовать попарные разности, т.е. получается еще три графика по три линии разностей, в итоге 12 точек в секунду минимум. Это не все, на ГУИ должна происходить отрисовка еще 2х графиков, также в реальном времени. И любые тормоза крайне нежелательны. ИМХО, не рационально хранить всю эту ботву и заново отрисовывать каждый раз по приходу новых данных, если можно просто дорисовать...
Или может быть я нагоняю и все будет пучком даже через пару часов работы? Подмигивающий
« Последнее редактирование: Март 19, 2012, 19:02 от arttr » Записан
Bepec
Гость
« Ответ #4 : Март 19, 2012, 22:53 »

Чуловек... У меня в 3 секунды приходит 2500 записей величиной в 8 байт Улыбающийся всё складируется/хранится/отрисовывается. И не тормозит...
Записан
FricGeger
Гость
« Ответ #5 : Март 19, 2012, 22:56 »

Из вашего же ответа следует, что опитимизировать надо не хранение данных, а рисование.

В QWT есть два примера по которым можно судить о том нас сколько быстро можно визуализировать большие объемы данных, это refreshtest и realtime.

Рисуйте по таймеру и сразу несколько точек, в аналогичной ситуации этого оказалось достаточно. В среднем приходило 140 точек в секунду, рисовалось на трех графиках, на слабом ноуте, проблем не было.



Записан
arttr
Гость
« Ответ #6 : Март 20, 2012, 06:17 »

Ок, тогда подскажите можно ли на одной канве сделать 3 графика? См. рисунок
Записан
FricGeger
Гость
« Ответ #7 : Март 21, 2012, 13:52 »

Посмотрите внимательно примеры, которые идут вместе с библиотекой, скомпилируйте запустите.
Там есть почти все что вам нужно. Посмотрите как это реализовано. + смотрите документацию.
Записан
arttr
Гость
« Ответ #8 : Март 21, 2012, 16:51 »

Смотрел. Читал. Гуглил. Может быть конечно что-то упустил. Если Вы с подобным сталкивались или есть конструктивные идеи, то пишите. Буду рад.
Записан
FricGeger
Гость
« Ответ #9 : Март 21, 2012, 18:27 »

Ок, тогда подскажите можно ли на одной канве сделать 3 графика? См. рисунок

Пример sinusplot, не подходит?
Записан
arttr
Гость
« Ответ #10 : Март 21, 2012, 18:37 »

Нет. Обязательно нужно 3 пары осей координат, примерно как на прикрепленном рисунке, только там осей Х нет. Честно говоря, я уже склоняюсь к мнению что эта задумка извращение....
Записан
twp
Гость
« Ответ #11 : Март 21, 2012, 18:40 »

хм, а просто 3 графика один под другим, не подойдет разве?
Записан
arttr
Гость
« Ответ #12 : Март 21, 2012, 19:20 »

Вообще - подойдут. У этих 3х графиков совпадают значения по оси Х и было бы очень приятно двигать их одновременно влево/вправо, чтобы оценить как изменяются кривые во времени
Записан
twp
Гость
« Ответ #13 : Март 21, 2012, 22:20 »

по идее это не сложно самому реализовать
Записан
arttr
Гость
« Ответ #14 : Март 22, 2012, 06:19 »

В чем заключается эта идея?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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