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