crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> как двигать QwtPlotMarker на QwtPlot
Vitali83
  опции профиля:
сообщение 25.11.2009, 10:49
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 24.11.2009
Пользователь №: 1257

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

я надеюсь здесь много знатоков 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 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 11:50