CameraItemView.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "CameraItemView.h"
  2. #include "MfcLabel.h"
  3. #include <qgraphicsitem.h>
  4. CameraItemView::CameraItemView(QWidget* parent)
  5. {
  6. //set the flags
  7. m_bMousePressed = false;
  8. //set the scale
  9. m_fViewScaleX = 1.0f;
  10. m_fViewScaleY = 1.0f;
  11. //set the parent pointer
  12. this->setParent(parent);
  13. //get the view port center
  14. m_ViewCenterPoint = this->viewport()->rect().center();
  15. this->scale(m_fViewScaleX, m_fViewScaleY);
  16. }
  17. CameraItemView::~CameraItemView()
  18. {
  19. }
  20. void CameraItemView::mousePressEvent(QMouseEvent* event)
  21. {
  22. m_bMousePressed = true;
  23. QPoint Pt = event->pos();
  24. //MfcLabel::fRect CurrentViewRect = this->geometry();
  25. if (m_bMousePressed && (event->buttons() & Qt::LeftButton))//&& CurrentViewRect.JudgePtInRectBoxOrNot(MfcLabel::fPoint(Pt.x(),Pt.y())))
  26. {
  27. m_ViewCenterPoint = mapToScene(event->pos()) - event->pos() + QPointF(width() / 2, height() / 2);
  28. m_MousePressPoint = Pt;
  29. }
  30. if (event->buttons() & Qt::RightButton) {
  31. // 鼠标右键被点击,执行相应的操作
  32. QGraphicsItem* Item = nullptr;
  33. foreach(QGraphicsItem * item, scene()->items())
  34. {
  35. if (item->isSelected())
  36. {
  37. Item = item;
  38. break;
  39. }
  40. }
  41. if (Item == nullptr)
  42. Item = scene()->items().front();
  43. centerOn(Item);
  44. m_fViewScaleX = 2 / m_fViewScaleX;
  45. m_fViewScaleY = 2 / m_fViewScaleY;
  46. scale(m_fViewScaleX, m_fViewScaleY);
  47. m_fViewScaleX = 2;
  48. m_fViewScaleY = 2;
  49. }
  50. QGraphicsView::mousePressEvent(event);
  51. }
  52. void CameraItemView::mouseReleaseEvent(QMouseEvent* event)
  53. {
  54. m_bMousePressed = false;
  55. m_MousePressPoint = QPoint(0, 0);
  56. }
  57. void CameraItemView::mouseMoveEvent(QMouseEvent* event)
  58. {
  59. QPoint Pt = event->pos();
  60. MfcLabel::fRect CurrentViewRect = this->geometry();
  61. if (m_bMousePressed)//&& CurrentViewRect.JudgePtInRectBoxOrNot(MfcLabel::fPoint(Pt.x(), Pt.y())))
  62. {
  63. QPoint CurrentPoint = Pt;
  64. CurrentPoint = CurrentPoint - m_MousePressPoint.toPoint();
  65. m_MouseMoveCurrentPoint = CurrentPoint;
  66. //m_ViewCenterPoint = m_ViewCenterPoint - m_MouseMoveCurrentPoint;
  67. //QPoint CurrentTopLeftPt = this->viewport()->rect().topLeft();
  68. this->centerOn(m_ViewCenterPoint);
  69. setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
  70. centerOn(m_ViewCenterPoint - m_MouseMoveCurrentPoint);
  71. }
  72. }
  73. void CameraItemView::wheelEvent(QWheelEvent* event)
  74. {
  75. QPoint Pt = event->pos();
  76. MfcLabel::fRect ViewPortRect;// GraphicsRect, GraphicsRect2;
  77. ViewPortRect = this->geometry();
  78. if (event->delta() < 0)
  79. {
  80. if (m_fViewScaleX < 0.2 || m_fViewScaleY <0.2)
  81. return;
  82. m_fViewScaleX /= 2;
  83. m_fViewScaleY /= 2;
  84. this->scale(0.5, 0.5);
  85. }
  86. else if(event->delta() > 0)
  87. {
  88. if (m_fViewScaleX > 2 || m_fViewScaleY > 2)
  89. return;
  90. m_fViewScaleX *= 2;
  91. m_fViewScaleY *= 2;
  92. this->scale(2, 2);
  93. }
  94. }