Russian Qt Forum

Qt => Вопросы новичков => Тема начата: arttr от Март 19, 2012, 09:51



Название: Три вопроса про Qwt
Отправлено: 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, к примеру, т.е. чтобы было комфортно лицезреть эти точки. Или лучше зум руками делать?

Заранее благодарен!


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 19, 2012, 17:44
Ответ на первый вопрос: забыл дописать
Код:
curve1->attach(ui->plot);

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

Второй вопрос по-прежнему остается открытым и очень актуальным!!!


Название: Re: Три вопроса про Qwt
Отправлено: FricGeger от Март 19, 2012, 17:57
По поводу второго вопроса советую посмотреть пример oscilloscope, там как раз происходит дорисовка точек.
у QwtPlotDirectPainter ест метод drawSeries который может дорисовать точки
Что плохого в том чтобы хранить масив точек?


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 19, 2012, 18:29
Цитировать
Что плохого в том чтобы хранить масив точек?

В секунду приходят минимум 9 точек, 3 из которых нужно отрисовать каждую на своей кривой. Далее еще на других графиках отрисовать попарные разности, т.е. получается еще три графика по три линии разностей, в итоге 12 точек в секунду минимум. Это не все, на ГУИ должна происходить отрисовка еще 2х графиков, также в реальном времени. И любые тормоза крайне нежелательны. ИМХО, не рационально хранить всю эту ботву и заново отрисовывать каждый раз по приходу новых данных, если можно просто дорисовать...
Или может быть я нагоняю и все будет пучком даже через пару часов работы? ;)


Название: Re: Три вопроса про Qwt
Отправлено: Bepec от Март 19, 2012, 22:53
Чуловек... У меня в 3 секунды приходит 2500 записей величиной в 8 байт :) всё складируется/хранится/отрисовывается. И не тормозит...


Название: Re: Три вопроса про Qwt
Отправлено: FricGeger от Март 19, 2012, 22:56
Из вашего же ответа следует, что опитимизировать надо не хранение данных, а рисование.

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

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





Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 20, 2012, 06:17
Ок, тогда подскажите можно ли на одной канве сделать 3 графика? См. рисунок


Название: Re: Три вопроса про Qwt
Отправлено: FricGeger от Март 21, 2012, 13:52
Посмотрите внимательно примеры, которые идут вместе с библиотекой, скомпилируйте запустите.
Там есть почти все что вам нужно. Посмотрите как это реализовано. + смотрите документацию.


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 21, 2012, 16:51
Смотрел. Читал. Гуглил. Может быть конечно что-то упустил. Если Вы с подобным сталкивались или есть конструктивные идеи, то пишите. Буду рад.


Название: Re: Три вопроса про Qwt
Отправлено: FricGeger от Март 21, 2012, 18:27
Ок, тогда подскажите можно ли на одной канве сделать 3 графика? См. рисунок

Пример sinusplot, не подходит?


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 21, 2012, 18:37
Нет. Обязательно нужно 3 пары осей координат, примерно как на прикрепленном рисунке, только там осей Х нет. Честно говоря, я уже склоняюсь к мнению что эта задумка извращение....


Название: Re: Три вопроса про Qwt
Отправлено: twp от Март 21, 2012, 18:40
хм, а просто 3 графика один под другим, не подойдет разве?


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 21, 2012, 19:20
Вообще - подойдут. У этих 3х графиков совпадают значения по оси Х и было бы очень приятно двигать их одновременно влево/вправо, чтобы оценить как изменяются кривые во времени


Название: Re: Три вопроса про Qwt
Отправлено: twp от Март 21, 2012, 22:20
по идее это не сложно самому реализовать


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 22, 2012, 06:19
В чем заключается эта идея?


Название: Re: Три вопроса про Qwt
Отправлено: twp от Март 22, 2012, 15:57
запихнуть все три графика в QScrollArea, дальше думаю понятно


Название: Re: Три вопроса про Qwt
Отправлено: arttr от Март 23, 2012, 18:19
Ок, спс за помощь