Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: karpenko1989 от Февраля 13, 2012, 13:34



Название: [Qwt] Как узнать координаты точки кривой на графике.
Отправлено: karpenko1989 от Февраля 13, 2012, 13:34
Добрый день. Необходимо реализовать слеедующее:
(http://s2.ipicture.ru/uploads/20120213/JbvOeUq7.jpg) (http://s2.ipicture.ru/Gallery/Viewfull/8565796.html)

Т.е при клике на графике необходимо узнать значение точки по оси Y.
Насколько я понял стандартными методами библиотеки Qwt это сделать невозможно.

Может быть, кто-либо сталкивался с подобной задачей, и нашел для неё решение?


Название: Re: [Qwt] Как узнать координаты точки кривой на графике.
Отправлено: twp от Февраля 13, 2012, 13:57
зная две точки прямого отрезка можно найти любую точку на нем методом пропорции
а найти индекс ближайшей точки кривой можно используя метод QwtPlotCurve::closestPoint()


Название: Re: [Qwt] Как узнать координаты точки кривой на графике.
Отправлено: madRoger от Февраля 13, 2012, 16:33
Можно прикрутить к Plot-у QwtPlotPicker. У него есть метод QPoint trackerPosition(), с помощью которого можно узнать X-координату. Зная ее, можно определить две ближайшие точки отрезка. Далее как twp написал, методом пропорции.


Название: Re: [Qwt] Как узнать координаты точки кривой на графике.
Отправлено: karpenko1989 от Февраля 14, 2012, 08:19
Добавил picker

Код:
   d_picker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft,
         QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn,
       myPlot->canvas());
   d_picker->setRubberBandPen(QColor(Qt::green));
   d_picker->setRubberBand(QwtPicker::CrossRubberBand);
   d_picker->setTrackerPen(QColor(Qt::white));

   int cp;
   cp = curv1->closestPoint(d_picker->trackerPosition());
   psetInterval->setNum(cp);


   connect(d_picker, SIGNAL(moved(QPoint)), SLOT(UpdVizir()));

Код:
void TrendTop::UpdVizir()
{
    int cp;
    cp = curv1->closestPoint(d_picker->trackerPosition());
    psetInterval->setNum(cp);
}

Хочу в label psetInterval вывести ту самую X-координату. Перепробовал все сигналы picker, но ничего не отображается.


Название: Re: [Qwt] Как узнать координаты точки кривой на графике.
Отправлено: madRoger от Февраля 14, 2012, 12:13
Метод trackerPosition() возвращает пиксельные координаты. Их нужно перевести в координаты графика
Используй QPointF QwtPlotPicker::invTransform(сonst QPoint &pos) const для перевода.

Х-координата будет invTransform(trackerPosition()).x();