Qt通过QGraphicsview实现简单缩放及还原效果

本文主要介绍通过QGraphicsview实现简单的缩放,以及缩放后还原原始大小,

1,自定义一个drawview继承QGraphicsview,缩放主要实现的函数为

void scale(qreal sx,qreal sy);

通过scale可以对view进行放大或缩小。

则可以在drawview中定义缩放slots为

void drawview::zoomIn(qreal delta)
{
    zoom(delta);
}
 
void drawview::zoomOut(qreal delta)
{
    zoom(1/delta);
}
 
void drawview::zoom(float scaleFactor)
{
    setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width();
    if (factor < 0.01 || factor > 2000)
        return;
    scale(scaleFactor, scaleFactor);
 
}

2,在mainwindows中引用drawview中的缩放函数

void MainWindow::ZoomIn()
{
    myview->zoomIn(1.2);
    qDebug()<<"zoomin";
}
 
void MainWindow::ZoomOut()
{
    qDebug()<<"zoomOut";
    myview->zoomOut(1.2);
}

3,还原原始大小

在看代码之前,我们可以先了解一下QMatrix,

AAD5C049-F2B0-FCE8-971C-7B886140DD63.png

可以看到QMatrix包含有6个参数,具体可以查看文档,简单来说

m11 - 水平缩放

m12 - 垂直拉伸

m21 - 水平拉伸

m22 - 垂直缩放

dx - 水平位移

dy - 垂直位移

通过这些参数,我们可以知道我们所需要调节的只有m11和m22,则把这两个参数设为1,不改变

void MainWindow::Original()
{
    myview->setTransformationAnchor(QGraphicsView::AnchorViewCenter);
    QMatrix q;
    q.setMatrix(1,myview->matrix().m12(),myview->matrix().m21(),1,myview->matrix().dx(),myview->matrix().dy());
    myview->setMatrix(q,false);
}
收藏 (0)
评论列表
正在载入评论列表...
我是有底线的
为您推荐
    暂时没有数据