[Qt-interest] mouse and polygons

Mahendra G.R mahendra at mahendragr.com
Wed Nov 17 10:25:20 CET 2010


Hi all,

anybody?, i just want to know how to contain the mouse pointer within the
polygon, or avoid seg fault when mouse pointer goes out of my polygon,


Regards,


On Fri, Nov 12, 2010 at 5:01 PM, Mahendra G.R <mahendra at mahendragr.com>wrote:

> Hello all,
>
> I have implemented drawing polygons in a scene using QpolygonF,
> QGraphicsPolygonItem and QgraphicsScene.  When i click on the scene, i
> collect the points and create a polygon on the double click, until here its
> fine.  When i move/drag the polygon it does move.  But the problem is, i
> have a huge data set, and when i move the polygon with this dataset in the
> background, polygon moves slowly, and when the cursor goes out of the
> polygon, i get a segmentaion fault, how should i restrict cursor to be
> inside the polygon item or is there a better solution for this?
>
>
> My function :
>
>
> void CustomScene::addPolygons( QVector<QPointF> &points )
> {
>
>         QPolygonF polygon1(points), polygon2;
>         MyItem *item1;
>         QPointF p1,p2,p3,p4;
>
>         p1 = points.at(0);
>         p2 = points.at(1);
>         p3 = points.at(2);
>         p4 = points.at(3);
>
>         item1 = new MyItem;
>         item1->setPen(QPen(Qt::red));
>         item1->setPolygon(polygon1);
>         item1->setAcceptDrops(true);
>         item1->setFlag(QGraphicsPolygonItem::ItemIsMovable);
>         item1->setFlag(QGraphicsPolygonItem::ItemSendsGeometryChanges);
>
>
>         this->addItem(item1);
>
>         points.clear();
> }
>
> void CustomScene::mousePressEvent ( QGraphicsSceneMouseEvent * event )
> {
>
>
>
>     if (addPolygonFlag == true && event->button() == Qt::LeftButton)
>     {
>
>         points.append(event->scenePos());
>
>     }
>     else if (event->button() == Qt::RightButton)
>     {
>         QGraphicsPolygonItem *tempItem;
>         tempItem = (QGraphicsPolygonItem*)this->itemAt(event->scenePos());
>         removeItem(tempItem);
>
>     }
>     QGraphicsScene::mousePressEvent(event);
>
> }
> void CustomScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
> {
>     addPolygons(points);
>     addPolygonFlag = true;
>     QGraphicsScene::mouseDoubleClickEvent(event);
>
> }
> void CustomScene::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
> {
>
>         QTextStream out(stdout);
>         MyItem *tempItem;
>
>         tempItem = (MyItem*)this->itemAt(event->scenePos());
>
>
>         if (tempItem == 0)
>         {
>             QGraphicsScene::mouseMoveEvent(event);
>             return;
>
>         }
>
>         tempPoly = tempItem->polygon();
>         //tempPoly1 = tempItem1->polygon();
>
>         QPointF p1,p2,p3,p4;
>         p1 = tempPoly.at(0);
>         p1 = tempItem->mapToParent(p1);
>         p2 = tempPoly.at(1);
>         p2 = tempItem->mapToParent(p2);
>         p3 = tempPoly.at(2);
>         p3 = tempItem->mapToParent(p3);
>         p4 = tempPoly.at(3);
>         p4 = tempItem->mapToParent(p4);
>
>         out <<"p1: "<<p1.x()<<" "<<p1.y()<<endl
>             <<"p2 : "<<" "<<p2.x()<<" "<<p2.y()<<endl
>             <<"p3 : "<<" "<<p3.x()<<" "<<p3.y()<<endl
>             <<"p4 : "<<" "<<p4.x()<<" "<<p4.y()<<endl;
>
>         QGraphicsScene::mouseMoveEvent(event);
>
>
> }
>
> --
> http://www.mahendragr.com
>



-- 
http://www.mahendragr.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20101117/b39f5260/attachment.html 


More information about the Qt-interest-old mailing list