|
- #include "hmiwidget.h"
- #include <QGraphicsSceneMouseEvent>
- #include <QCursor>
-
- 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);
- }
|