本文主要介紹通過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 }
