sizehandle.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "sizehandle.h"
  2. #include <QGraphicsScene>
  3. #include <QGraphicsSceneContextMenuEvent>
  4. #include <QMenu>
  5. #include <QPainter>
  6. #include <qdebug.h>
  7. SizeHandleRect::SizeHandleRect(QGraphicsItem* parent , Direction d, QGraphicsItem *resizable)
  8. :QGraphicsRectItem(0,0,SELECTION_HANDLE_SIZE,SELECTION_HANDLE_SIZE,parent)
  9. ,m_dir(d)
  10. ,m_resizable(resizable)
  11. ,m_state(SelectionHandleOff)
  12. {
  13. setParentItem(parent);
  14. hide();
  15. }
  16. void SizeHandleRect::updateCursor()
  17. {
  18. switch (m_dir) {
  19. case Right:
  20. setCursor(Qt::SizeHorCursor);
  21. return;
  22. case RightTop:
  23. setCursor(Qt::SizeBDiagCursor);
  24. return;
  25. case RightBottom:
  26. setCursor(Qt::SizeFDiagCursor);
  27. return;
  28. case LeftBottom:
  29. setCursor(Qt::SizeBDiagCursor);
  30. return;
  31. case Bottom:
  32. setCursor(Qt::SizeVerCursor);
  33. return;
  34. case LeftTop:
  35. setCursor(Qt::SizeFDiagCursor);
  36. return;
  37. case Left:
  38. setCursor(Qt::SizeHorCursor);
  39. return;
  40. case Top:
  41. setCursor(Qt::SizeVerCursor);
  42. return;
  43. default:
  44. break;
  45. }
  46. setCursor(Qt::ArrowCursor);
  47. }
  48. void SizeHandleRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
  49. {
  50. QColor c = QColor("limegreen");
  51. // c.setAlpha(200);
  52. painter->setPen(Qt::NoPen);
  53. painter->setBrush(QBrush(c));
  54. painter->drawRect(rect());
  55. }
  56. void SizeHandleRect::setState(SelectionHandleState st)
  57. {
  58. if (st == m_state)
  59. return;
  60. switch (st) {
  61. case SelectionHandleOff:
  62. hide();
  63. break;
  64. case SelectionHandleInactive:
  65. case SelectionHandleActive:
  66. show();
  67. break;
  68. }
  69. m_state = st;
  70. }
  71. bool SizeHandleRect::hitTest(const QPointF &point)
  72. {
  73. QPointF pt = mapFromScene(point);
  74. return rect().contains(pt);
  75. }
  76. void SizeHandleRect::move(qreal x, qreal y)
  77. {
  78. setPos(x,y);
  79. }