继承QGraphicsView自定义视图,重写wheelevent()事件,在滚轮事件中实现视图的放大和缩小。
放大缩小的主要代码:
void GraphicsView::wheelEvent(QWheelEvent *e)
{if(!m_isScroll){return ;}if (e->modifiers() & Qt::ControlModifier){qreal curScale = m_scale;if (e->delta() > 0)//远离{if(curScale < upLimit){zoomInView();}}else{if(curScale > lowLimit){zoomOutView();}}e->accept();}else{QGraphicsView::wheelEvent(e);}emit sinalScaleRatio(m_scale);
}
void GraphicsView::zoomInView()
{if(m_scale>3)return;m_lastScale = m_scale;scale(1.0/m_scale,1.0/m_scale);//这样可以在百分之百的基础上每次放大10%m_scale = m_scale + 0.1;emit sinalScaleRatio(m_scale);//发送每次放大的比值scale(m_scale,m_scale);
}void GraphicsView::zoomOutView()
{if(m_scale<0.3)return;m_lastScale = m_scale;scale(1.0/m_scale,1.0/m_scale);m_scale = m_lastScale - 0.1;emit sinalScaleRatio(m_scale);scale(m_scale,m_scale);
}
每次的缩放比可以通过下面的方法实现显示
void chunzhongForm::slot_displayScaleRatio(qreal scale)
{m_scale = scale;int ratio = m_scale * 100;QString strScale = QString::number(ratio) + "%";ui->valuePercentBtn->setText(strScale);//显示缩放比
}
以上是主要的代码,仅供思路的参考。