1 #include "graphicsscenerectmove.h"
3 #include <QGraphicsSceneMouseEvent>
4 #include <QGraphicsRectItem>
5 #include <QGraphicsView>
8 QGraphicsItem* selected=NULL;
11 enum resizeMode {NoResize,TopLeft,BottomLeft,TopRight,BottomRight,Left,Right,Up,Down};
12 GraphicsSceneRectMove::GraphicsSceneRectMove(QObject *parent):QGraphicsScene(parent){
16 void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e){
18 if (selected && selected->type()==3 &&button==1){
20 QGraphicsRectItem *gi=(QGraphicsRectItem*)selected;
21 QRectF newrect=gi->rect();
22 QPointF newpoint=e->scenePos();
23 newpoint-=selected->scenePos();
26 newrect.setTopLeft(newpoint);
29 newrect.setBottomLeft(newpoint);
32 newrect.setTopRight(newpoint);
35 newrect.setBottomRight(newpoint);
38 newrect.setLeft(newpoint.x());
41 newrect.setRight(newpoint.x());
44 newrect.setTop(newpoint.y());
47 newrect.setBottom(newpoint.y());
52 gi->setPos(selected->scenePos());
55 QPointF p=e->scenePos();
59 foreach(QGraphicsItem* g, items( QRectF( p , QSizeF(4,4) ).toRect() ) ){
63 QGraphicsRectItem *gi=(QGraphicsRectItem*)g;
65 r.translate(gi->scenePos());
67 if ( (r.toRect().topLeft()-=e->scenePos().toPoint() ).manhattanLength()<3 ){
69 }else if ((r.toRect().bottomLeft()-=e->scenePos().toPoint() ).manhattanLength()<3 ){
70 resizeMode=BottomLeft;
71 }else if ((r.toRect().topRight()-=e->scenePos().toPoint() ).manhattanLength()<3 ){
73 }else if ((r.toRect().bottomRight()-=e->scenePos().toPoint() ).manhattanLength()<3 ){
74 resizeMode=BottomRight;
75 }else if ( qAbs(r.toRect().left()-e->scenePos().toPoint().x() ) <3){
77 }else if ( qAbs(r.toRect().right()-e->scenePos().toPoint().x() ) <3){
79 }else if ( qAbs(r.toRect().top()-e->scenePos().toPoint().y() ) <3){
81 }else if ( qAbs(r.toRect().bottom()-e->scenePos().toPoint().y() ) <3){
84 if (resizeMode!=NoResize)
91 setCursor(QCursor(Qt::SizeFDiagCursor));
95 setCursor(QCursor(Qt::SizeBDiagCursor));
99 setCursor(Qt::SizeHorCursor);
103 setCursor(Qt::SizeVerCursor);
106 setCursor(QCursor(Qt::ArrowCursor));
107 QGraphicsScene::mouseMoveEvent(e);
113 void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e){
115 if (!selected || selected->type()!=3)
116 QGraphicsScene::mousePressEvent(e);
118 void GraphicsSceneRectMove::mouseReleaseEvent(QGraphicsSceneMouseEvent* e){
120 if (!selected || selected->type()!=3)
121 QGraphicsScene::mouseReleaseEvent(e);
124 void GraphicsSceneRectMove::setCursor(QCursor c){
125 QList<QGraphicsView*> l=views();
126 foreach(QGraphicsView* v, l){