#include "CameraItemView.h" #include "MfcLabel.h" #include CameraItemView::CameraItemView(QWidget* parent) { //set the flags m_bMousePressed = false; //set the scale m_fViewScaleX = 1.0f; m_fViewScaleY = 1.0f; //set the parent pointer this->setParent(parent); //get the view port center m_ViewCenterPoint = this->viewport()->rect().center(); this->scale(m_fViewScaleX, m_fViewScaleY); } CameraItemView::~CameraItemView() { } void CameraItemView::mousePressEvent(QMouseEvent* event) { m_bMousePressed = true; QPoint Pt = event->pos(); //MfcLabel::fRect CurrentViewRect = this->geometry(); if (m_bMousePressed && (event->buttons() & Qt::LeftButton))//&& CurrentViewRect.JudgePtInRectBoxOrNot(MfcLabel::fPoint(Pt.x(),Pt.y()))) { m_ViewCenterPoint = mapToScene(event->pos()) - event->pos() + QPointF(width() / 2, height() / 2); m_MousePressPoint = Pt; } if (event->buttons() & Qt::RightButton) { // 鼠标右键被点击,执行相应的操作 QGraphicsItem* Item = nullptr; foreach(QGraphicsItem * item, scene()->items()) { if (item->isSelected()) { Item = item; break; } } if (Item == nullptr) Item = scene()->items().front(); centerOn(Item); m_fViewScaleX = 2 / m_fViewScaleX; m_fViewScaleY = 2 / m_fViewScaleY; scale(m_fViewScaleX, m_fViewScaleY); m_fViewScaleX = 2; m_fViewScaleY = 2; } QGraphicsView::mousePressEvent(event); } void CameraItemView::mouseReleaseEvent(QMouseEvent* event) { m_bMousePressed = false; m_MousePressPoint = QPoint(0, 0); } void CameraItemView::mouseMoveEvent(QMouseEvent* event) { QPoint Pt = event->pos(); MfcLabel::fRect CurrentViewRect = this->geometry(); if (m_bMousePressed)//&& CurrentViewRect.JudgePtInRectBoxOrNot(MfcLabel::fPoint(Pt.x(), Pt.y()))) { QPoint CurrentPoint = Pt; CurrentPoint = CurrentPoint - m_MousePressPoint.toPoint(); m_MouseMoveCurrentPoint = CurrentPoint; //m_ViewCenterPoint = m_ViewCenterPoint - m_MouseMoveCurrentPoint; //QPoint CurrentTopLeftPt = this->viewport()->rect().topLeft(); this->centerOn(m_ViewCenterPoint); setTransformationAnchor(QGraphicsView::AnchorUnderMouse); centerOn(m_ViewCenterPoint - m_MouseMoveCurrentPoint); } } void CameraItemView::wheelEvent(QWheelEvent* event) { QPoint Pt = event->pos(); MfcLabel::fRect ViewPortRect;// GraphicsRect, GraphicsRect2; ViewPortRect = this->geometry(); if (event->delta() < 0) { if (m_fViewScaleX < 0.2 || m_fViewScaleY <0.2) return; m_fViewScaleX /= 2; m_fViewScaleY /= 2; this->scale(0.5, 0.5); } else if(event->delta() > 0) { if (m_fViewScaleX > 2 || m_fViewScaleY > 2) return; m_fViewScaleX *= 2; m_fViewScaleY *= 2; this->scale(2, 2); } }