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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qwt] Как узнать координаты точки кривой на графике.  (Прочитано 6703 раз)
karpenko1989
Гость
« : Февраль 13, 2012, 13:34 »

Добрый день. Необходимо реализовать слеедующее:


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

Может быть, кто-либо сталкивался с подобной задачей, и нашел для неё решение?
« Последнее редактирование: Февраль 13, 2012, 13:35 от karpenko1989 » Записан
twp
Гость
« Ответ #1 : Февраль 13, 2012, 13:57 »

зная две точки прямого отрезка можно найти любую точку на нем методом пропорции
а найти индекс ближайшей точки кривой можно используя метод QwtPlotCurve::closestPoint()
Записан
madRoger
Гость
« Ответ #2 : Февраль 13, 2012, 16:33 »

Можно прикрутить к Plot-у QwtPlotPicker. У него есть метод QPoint trackerPosition(), с помощью которого можно узнать X-координату. Зная ее, можно определить две ближайшие точки отрезка. Далее как twp написал, методом пропорции.
Записан
karpenko1989
Гость
« Ответ #3 : Февраль 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, но ничего не отображается.
Записан
madRoger
Гость
« Ответ #4 : Февраль 14, 2012, 12:13 »

Метод trackerPosition() возвращает пиксельные координаты. Их нужно перевести в координаты графика
Используй QPointF QwtPlotPicker::invTransform(сonst QPoint &pos) const для перевода.

Х-координата будет invTransform(trackerPosition()).x();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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