继承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);//显示缩放比
}
以上是主要的代码,仅供思路的参考。