Russian Qt Forum
Апреля 27, 2025, 13:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: moving QwtPlotMarkers on the QwtPlot  (Прочитано 4201 раз)
Vitali83
Гость
« : Ноября 25, 2009, 11:10 »

здравствуйте,

я надеюсь здесь много знатоков Qwt, которые мне могли бы помочь решит следушею проблему:
Я уже всю неделю стараюсь сделать QwtPlotMarker двигаюшимся, что значит если я мышкой нажимаю на QwtPlotMarker и тяну его по плоту, то етот объект должен преследовать мышь и отобразоваться в том месте где я отпушю мышь. К сожалению, я до сих пор не смог ето реализовать. Помогите пожалуйста.

Детали: 1) я исползую QwtPlot, на который я нанес несколько 2) QwtPlotMarker. Дополнительно я исползую QwtPlotPicker которым я как раз хочу выделять объекты и двигать их.

мой код:

Код:
 ...
picker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft,
QwtPicker::PointSelection | QwtPicker::DragSelection,
QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn,
this->canvas());

        connect( picker, SIGNAL(moved(const QwtDoublePoint& ) ),
        this, SLOT(cursorMoved( const QwtDoublePoint& ) ) );

        connect( picker, SIGNAL(selected( const QwtDoublePoint& ) ),
        this, SLOT(cursorSelected( const QwtDoublePoint& ) ) );
...

void Plot::cursorSelected(const QwtDoublePoint &Point)
{
//selectedPoint = NULL;
std::cout << "in Plot::cursorSelected, selectedPoint = " << selectedPoint << std::endl;
const QwtPlotItemList& List = itemList();
QwtPlotItemIterator Iter = List.begin();
for ( QwtPlotItemIterator it = List.begin();it != List.end(); ++it )
    {
    std::cout << "(*it) "<< (*it) << std::endl;
        if ( (*it)->rtti() == QwtPlotItem::Rtti_PlotMarker )
        {
        std::cout << "(*it) if Marker "<< (*it) << std::endl;
            QwtPlotMarker *mark = ((QwtPlotMarker*)(*it));
            std::cout << "mark->xValue() "  << mark->xValue() << "mark->yValue() "<<mark->yValue() << std::endl;
            QwtDoubleRect rec = mark->boundingRect();
            rec.setHeight(10);
            rec.setWidth(10);
            std::cout << "mark->boundingRect()"  <<rec.width()<<rec.height()<< std::endl;
            if(rec.contains(Point)){
                    std::cout << "MATCH"  << std::endl;
            selectedPoint = dynamic_cast<QwtPlotMarker*>(mark);
            std::cout << "selectedPoint = " << selectedPoint << std::endl;
                    }
            else selectedPoint = NULL;
        }
    }

}
//##################################################################
void Plot::cursorMoved( const QwtDoublePoint& Point){
std::cout << "in Plot::cursorMoved, selectedPoint = " << selectedPoint << std::endl;

std::cout << "Point.x()= " << Point.x() <<"Point.y()= " << Point.y() << std::endl;
if(selectedPoint){

selectedPoint->setValue( Point);
   /* selectedPoint->setXValue( Point.x());
    selectedPoint->setYValue( Point.y());*/

    std::cout << "selectedPoint->xValue(): " << selectedPoint->xValue() <<"selectedPoint->yValue(): " << selectedPoint->yValue()<< std::endl;
   // add another point just for test
    PointItem *item = new PointItem(QwtDoubleRect(0.5, 0.5 , 0.0001, 0.0001));
    item->setZ(100);
    item->attach(this);
    this->replot();
}
}

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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