#include "hmiwidget.h" #include #include ResizableRectangle::ResizableRectangle(qreal x, qreal y, qreal w, qreal h) : QGraphicsRectItem(x, y, w, h), resizing(false) { setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); setCursor(Qt::ArrowCursor); } void ResizableRectangle::mousePressEvent(QGraphicsSceneMouseEvent *event) { // 检查是否在调整区域 if (rect().bottomRight().x() - 10 <= event->pos().x() && rect().bottomRight().y() - 10 <= event->pos().y()) { resizing = true; setCursor(Qt::SizeFDiagCursor); } else { // 传递事件给基类处理移动 resizing = false; setCursor(Qt::SizeAllCursor); QGraphicsRectItem::mousePressEvent(event); } } void ResizableRectangle::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if (resizing) { // 调整大小逻辑 QRectF newRect = rect(); newRect.setBottomRight(event->pos()); setRect(newRect); } else { // 传递事件给基类处理移动 QGraphicsRectItem::mouseMoveEvent(event); } } void ResizableRectangle::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { resizing = false; setCursor(Qt::ArrowCursor); QGraphicsRectItem::mouseReleaseEvent(event); } // -------------------- ResizableEllipse -------------------- ResizableEllipse::ResizableEllipse(qreal x, qreal y, qreal w, qreal h) : QGraphicsEllipseItem(x, y, w, h), resizing2(false) { setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); setCursor(Qt::ArrowCursor); } void ResizableEllipse::mousePressEvent(QGraphicsSceneMouseEvent *event) { QRectF ellipseRect = rect(); if (ellipseRect.bottomRight().x() - 10 <= event->pos().x() && ellipseRect.bottomRight().y() - 10 <= event->pos().y()) { resizing2 = true; setCursor(Qt::SizeFDiagCursor); } else { // 传递事件给基类处理移动 resizing2 = false; setCursor(Qt::SizeAllCursor); QGraphicsEllipseItem::mousePressEvent(event); } } void ResizableEllipse::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if (resizing2) { QRectF newRect = rect(); newRect.setBottomRight(event->pos()); setRect(newRect); } else { // 传递事件给基类处理移动 QGraphicsEllipseItem::mouseMoveEvent(event); } } void ResizableEllipse::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { resizing2 = false; setCursor(Qt::ArrowCursor); QGraphicsEllipseItem::mouseReleaseEvent(event); }