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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM