您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页Qt QGraphicsview缩放及还原

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 }

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务