Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: carhun от Август 10, 2012, 15:12



Название: QwtPlot, QwtPlotMarkes
Отправлено: carhun от Август 10, 2012, 15:12
Добрый день.
У меня есть допустим 10 QwtPlot'в на к-ых нарисовано на каждом по 5-10 кривых QwtPlotCurve ( к-ые плюс ко всему еще и solid).
И дальше, что мне надо мне надо завести маркер на каждую кривую и в нем отображать значение оси Y , к-ое соотвествуется определенном Х.

Значение Х я беру исходя из QwtPlotPicker'a - QwtPlotPicker - SIGNAL(moved(QPointF)).

Так вот проблема заключается в том, что если я начну возить мышкой по графику, то соотвественно все значения надо пересчитывать, и заново атаачить на плоты и соотв. реплотить плоты... В связи с этим возникают очень большие лаги....

Как с этим можно бороться?

Как сделать если у меня есть допустим на каждый плот QwtPlotPicker и как тогда, что бы когда я вожу по одному из плотов, на отсальных плотах трекеры тоже отображались?

С уважением,
 carhun


Название: Re: QwtPlot, QwtPlotMarkes
Отправлено: kvrus от Август 29, 2012, 11:26
Как то год назад думал над этим же вопросом. Нужны были маркеры: сначала сделал так же как и вы пробовал перетаскивать маркер и все тормозило. Потом пошел дальше сделал оверлей прозрачный виджет поверх плоттера на котором обрабатывал перетаскивание и перерисовку (при этом плоттер не перерисовывался), все вроде работало быстренько, но
только оверлей перехватывал все события мыши над плоттером, соответственно зуммер не работал. Такой вариант не понравился и я вообще забил на тему. Недавно потребовалось делать задачу: на график накладывать маску. Это так же требует манипуляций с перетаскиванием объектов мышью по плоттеру. Реализовал через класс CanvasPicker (помоему в примерах QWT он есть). Он работает как обработчик событий для QWT очень быстро, можно поставить фильтр на события. Если в следующий раз соберусь делать маркер, то сделаю через этот класс. Попробуйте использовать его.   


Название: Re: QwtPlot, QwtPlotMarkes
Отправлено: carhun от Сентябрь 10, 2012, 16:04
Спасибо, именно так и решил, через прозрачный виджет наложенный сверху...

Также, если кому-то может надо будет, то в trunk'e QWT сейчас есть класс QwtPlotOverlay , к-ый делает по сути тоже самое...