#include "myview.h" #include #include #include #include "picscene.h" #include MyView::MyView(QWidget *parent) : QGraphicsView(parent) { zoomRatio = 1; //setDragMode(QGraphicsView::ScrollHandDrag);//手型拖动 //setAlignment(Qt::AlignLeft | Qt::AlignTop); //setFocusPolicy( Qt::NoFocus ); } // static float a = 1.615; static float a = 1.64; void MyView::ZoomOut(void) { if(zoomRatio < 6) { zoomRatio++; // scale(2,2); scale(a,a); } } void MyView::ZoomIn(void) { if(zoomRatio > 2) { zoomRatio--; scale(1/a,1/a); } } //void MyView::wheelEvent(QWheelEvent*event) //滚轮事件 //{ //// if(event->delta() > 0) //如果鼠标滚轮远离使用者,则delta()返回正值 //// scale(0.5,0.5); //视图缩放 //// else scale(2,2); //} //void MyView::mousePressEvent(QMouseEvent*event) //{ //// rotate(90); //视图旋转顺时针90度 //} void MyView::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_isPressing = true; const QPointF scenePos = mapToScene(event->pos()); const bool hasSelectedItem = scene() && !scene()->selectedItems().isEmpty(); m_pressOnItem = hasSelectedItem || (scene() && scene()->itemAt(scenePos, transform()) != nullptr); m_lastPanPoint = event->pos(); } QGraphicsView::mousePressEvent(event); } void MyView::mouseMoveEvent(QMouseEvent *event) { if (m_isPressing && !m_pressOnItem && !m_isPanning) { const bool noSelectedItems = scene() && scene()->selectedItems().isEmpty(); if (noSelectedItems) { QPoint delta = event->pos() - m_lastPanPoint; if (std::abs(delta.x()) >= MyView::PanStartDistance && std::abs(delta.x()) > std::abs(delta.y())) { m_isPanning = true; setCursor(Qt::ClosedHandCursor); } } } if (m_isPanning) { int deltaX = event->pos().x() - m_lastPanPoint.x(); if (deltaX != 0) { horizontalScrollBar()->setValue(horizontalScrollBar()->value() - deltaX); m_lastPanPoint = event->pos(); } event->accept(); return; } QGraphicsView::mouseMoveEvent(event); } void MyView::mouseReleaseEvent(QMouseEvent *event) { if (m_isPanning && event->button() == Qt::LeftButton) { m_isPanning = false; m_isPressing = false; setCursor(Qt::ArrowCursor); event->accept(); return; } if (event->button() == Qt::LeftButton) { m_isPressing = false; m_pressOnItem = false; } QGraphicsView::mouseReleaseEvent(event); } void MyView::keyPressEvent(QKeyEvent *event) { //event->accept(); //parent()->event((QEvent*) event); if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right || event->key() == Qt::Key_Up || event->key() == Qt::Key_Down) { // 处理上下键事件 PicScene* picScene = dynamic_cast(this->scene()); if(picScene) { picScene->keyPressEvent(event); } } else { // 其他键事件交给父类处理 QGraphicsView::keyPressEvent(event); } }