選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

91 行
2.6 KiB

  1. #include "hmiwidget.h"
  2. #include <QGraphicsSceneMouseEvent>
  3. #include <QCursor>
  4. ResizableRectangle::ResizableRectangle(qreal x, qreal y, qreal w, qreal h)
  5. : QGraphicsRectItem(x, y, w, h), resizing(false)
  6. {
  7. setFlag(QGraphicsItem::ItemIsMovable, true);
  8. setFlag(QGraphicsItem::ItemIsSelectable, true);
  9. setCursor(Qt::ArrowCursor);
  10. }
  11. void ResizableRectangle::mousePressEvent(QGraphicsSceneMouseEvent *event)
  12. {
  13. // 检查是否在调整区域
  14. if (rect().bottomRight().x() - 10 <= event->pos().x() &&
  15. rect().bottomRight().y() - 10 <= event->pos().y()) {
  16. resizing = true;
  17. setCursor(Qt::SizeFDiagCursor);
  18. } else {
  19. // 传递事件给基类处理移动
  20. resizing = false;
  21. setCursor(Qt::SizeAllCursor);
  22. QGraphicsRectItem::mousePressEvent(event);
  23. }
  24. }
  25. void ResizableRectangle::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
  26. {
  27. if (resizing) {
  28. // 调整大小逻辑
  29. QRectF newRect = rect();
  30. newRect.setBottomRight(event->pos());
  31. setRect(newRect);
  32. } else {
  33. // 传递事件给基类处理移动
  34. QGraphicsRectItem::mouseMoveEvent(event);
  35. }
  36. }
  37. void ResizableRectangle::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
  38. {
  39. resizing = false;
  40. setCursor(Qt::ArrowCursor);
  41. QGraphicsRectItem::mouseReleaseEvent(event);
  42. }
  43. // -------------------- ResizableEllipse --------------------
  44. ResizableEllipse::ResizableEllipse(qreal x, qreal y, qreal w, qreal h)
  45. : QGraphicsEllipseItem(x, y, w, h), resizing2(false)
  46. {
  47. setFlag(QGraphicsItem::ItemIsMovable, true);
  48. setFlag(QGraphicsItem::ItemIsSelectable, true);
  49. setCursor(Qt::ArrowCursor);
  50. }
  51. void ResizableEllipse::mousePressEvent(QGraphicsSceneMouseEvent *event)
  52. {
  53. QRectF ellipseRect = rect();
  54. if (ellipseRect.bottomRight().x() - 10 <= event->pos().x() &&
  55. ellipseRect.bottomRight().y() - 10 <= event->pos().y()) {
  56. resizing2 = true;
  57. setCursor(Qt::SizeFDiagCursor);
  58. } else {
  59. // 传递事件给基类处理移动
  60. resizing2 = false;
  61. setCursor(Qt::SizeAllCursor);
  62. QGraphicsEllipseItem::mousePressEvent(event);
  63. }
  64. }
  65. void ResizableEllipse::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
  66. {
  67. if (resizing2) {
  68. QRectF newRect = rect();
  69. newRect.setBottomRight(event->pos());
  70. setRect(newRect);
  71. } else {
  72. // 传递事件给基类处理移动
  73. QGraphicsEllipseItem::mouseMoveEvent(event);
  74. }
  75. }
  76. void ResizableEllipse::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
  77. {
  78. resizing2 = false;
  79. setCursor(Qt::ArrowCursor);
  80. QGraphicsEllipseItem::mouseReleaseEvent(event);
  81. }