• Qt QGraphicsview缩放及还原


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

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

    void scale(qreal sx,qreal sy);

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

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

     1 void drawview::zoomIn(qreal delta)
     2 {
     3     zoom(delta);
     4 }
     5  
     6 void drawview::zoomOut(qreal delta)
     7 {
     8     zoom(1/delta);
     9 }
    10  
    11 void drawview::zoom(float scaleFactor)
    12 {
    13     setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    14     qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width();
    15     if (factor < 0.01 || factor > 2000)
    16         return;
    17     scale(scaleFactor, scaleFactor);
    18  
    19 }

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

     1 void MainWindow::ZoomIn()
     2 {
     3     myview->zoomIn(1.2);
     4     qDebug()<<"zoomin";
     5 }
     6  
     7 void MainWindow::ZoomOut()
     8 {
     9     qDebug()<<"zoomOut";
    10     myview->zoomOut(1.2);
    11 }

    3,还原原始大小

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

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

    m11 - 水平缩放

    m12 - 垂直拉伸

    m21 - 水平拉伸

    m22 - 垂直缩放

    dx - 水平位移

    dy - 垂直位移

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

    1 void MainWindow::Original()
    2 {
    3     myview->setTransformationAnchor(QGraphicsView::AnchorViewCenter);
    4     QMatrix q;
    5     q.setMatrix(1,myview->matrix().m12(),myview->matrix().m21(),1,myview->matrix().dx(),myview->matrix().dy());
    6     myview->setMatrix(q,false);
    7 }
  • 相关阅读:
    java中的成员变量、静态变量与局部变量
    java中static关键字的作用
    java中super关键字的作用
    java中this关键字的作用
    Java创建对象的4种方式
    IO体系、集合体系、多线程、jdbc
    二分搜索树
    二叉树搜索(二分查找法)
    索引堆
    原地堆排序
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/15271590.html
Copyright © 2020-2023  润新知