+void MonitorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ QPointF mousePos = event->scenePos();
+
+ if (m_selectedItem && event->buttons() & Qt::LeftButton) {
+ // Rect
+ if (m_selectedItem->type() == 3) {
+ QGraphicsRectItem *item = static_cast <QGraphicsRectItem *>(m_selectedItem);
+ QRectF rect = item->rect().normalized();
+ QPointF pos = item->pos();
+ QPointF mousePosInRect = item->mapFromScene(mousePos);
+ switch (m_resizeMode) {
+ case TopLeft:
+ if (mousePos.x() < pos.x() + rect.height() && mousePos.y() < pos.y() + rect.height()) {
+ item->setRect(rect.adjusted(0, 0, -mousePosInRect.x(), -mousePosInRect.y()));
+ item->setPos(mousePos);
+ }
+ break;
+ case Top:
+ if (mousePos.y() < pos.y() + rect.height()) {
+ rect.setBottom(rect.height() - mousePosInRect.y());
+ item->setRect(rect);
+ item->setPos(QPointF(pos.x(), mousePos.y()));
+ }
+ break;
+ case TopRight:
+ if (mousePos.x() > pos.x() && mousePos.y() < pos.y() + rect.height()) {
+ rect.setBottomRight(QPointF(mousePosInRect.x(), rect.bottom() - mousePosInRect.y()));
+ item->setRect(rect);
+ item->setPos(QPointF(pos.x(), mousePos.y()));
+ }
+ break;
+ case Left:
+ if (mousePos.x() < pos.x() + rect.width()) {
+ rect.setRight(rect.width() - mousePosInRect.x());
+ item->setRect(rect);
+ item->setPos(QPointF(mousePos.x(), pos.y()));
+ }
+ break;
+ case Right:
+ if (mousePos.x() > pos.x()) {
+ rect.setRight(mousePosInRect.x());
+ item->setRect(rect);
+ }
+ break;
+ case BottomLeft:
+ if (mousePos.x() < pos.x() + rect.width() && mousePos.y() > pos.y()) {
+ rect.setBottomRight(QPointF(rect.width() - mousePosInRect.x(), mousePosInRect.y()));
+ item->setRect(rect);
+ item->setPos(QPointF(mousePos.x(), pos.y()));
+ }
+ break;
+ case Bottom:
+ if (mousePos.y() > pos.y()) {
+ rect.setBottom(mousePosInRect.y());
+ item->setRect(rect);
+ }
+ break;
+ case BottomRight:
+ if (mousePos.x() > pos.x() && mousePos.y() > pos.y()) {
+ rect.setBottomRight(mousePosInRect);
+ item->setRect(rect);
+ }
+ break;
+ default:
+ QPointF diff = mousePos - m_clickPoint;
+ m_clickPoint = mousePos;
+ item->moveBy(diff.x(), diff.y());
+ break;
+ }
+ }
+ } else {
+ mousePos -= QPoint(4, 4);
+ bool itemFound = false;
+ QList<QGraphicsItem *> itemList = items(QRectF(mousePos, QSizeF(4, 4)).toRect());
+
+ foreach (const QGraphicsItem* item, itemList) {
+ if (item->zValue() >= 0 && item->flags() &QGraphicsItem::ItemIsMovable) {
+ // Rect
+ if (item->type() == 3) {
+ if (m_view == NULL)
+ continue;
+
+ itemFound = true;
+
+ switch (getResizeMode((QGraphicsRectItem*)item, m_view->mapFromScene(event->scenePos()))) {
+ case TopLeft:
+ case BottomRight:
+ m_view->setCursor(Qt::SizeFDiagCursor);
+ break;
+ case TopRight:
+ case BottomLeft:
+ m_view->setCursor(Qt::SizeBDiagCursor);
+ break;
+ case Top:
+ case Bottom:
+ m_view->setCursor(Qt::SizeVerCursor);
+ break;
+ case Left:
+ case Right:
+ m_view->setCursor(Qt::SizeHorCursor);
+ break;
+ default:
+ m_view->setCursor(Qt::OpenHandCursor);
+ }
+ break;
+ }
+ }
+ }
+
+ if (!itemFound && m_view != NULL)
+ m_view->setCursor(Qt::ArrowCursor);
+
+ QGraphicsScene::mouseMoveEvent(event);
+ }
+}