本文主要介紹通過qgraphicsview實現簡單的縮放,以及縮放后還原原始大小。
1,自定義一個drawview繼承qgraphicsview,縮放主要實現的函數為
void scale(qreal sx,qreal sy);
通過scale可以對view進行放大或縮小。
則可以在drawview中定義縮放slots為
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
void drawview::zoomin(qreal delta) { zoom(delta); } void drawview::zoomout(qreal delta) { zoom(1/delta); } void drawview::zoom( float scalefactor) { settransformationanchor(qgraphicsview::anchorundermouse); qreal factor = transform().scale(scalefactor, scalefactor).maprect(qrectf(0, 0, 1, 1)).width(); if (factor < 0.01 || factor > 2000) return ; scale(scalefactor, scalefactor); } |
2,在mainwindows中引用drawview中的縮放函數
1
2
3
4
5
6
7
8
9
10
11
|
void mainwindow::zoomin() { myview->zoomin(1.2); qdebug()<< "zoomin" ; } void mainwindow::zoomout() { qdebug()<< "zoomout" ; myview->zoomout(1.2); } |
3,還原原始大小
在看代碼之前,我們可以先了解一下qmatrix,
可以看到qmatrix包含有6個參數,具體可以查看文檔,簡單來說
m11 - 水平縮放
m12 - 垂直拉伸
m21 - 水平拉伸
m22 - 垂直縮放
dx - 水平位移
dy - 垂直位移
通過這些參數,我們可以知道我們所需要調節的只有m11和m22,則把這兩個參數設為1,不改變
1
2
3
4
5
6
7
|
void mainwindow::original() { myview->settransformationanchor(qgraphicsview::anchorviewcenter); qmatrix q; q.setmatrix(1,myview->matrix().m12(),myview->matrix().m21(),1,myview->matrix().dx(),myview->matrix().dy()); myview->setmatrix(q, false ); } |
ps:qgraphicsview的比例復原
我們都知道qgraphicsview的縮放是使用scale函數來設置的,但是每次設置scale都會在之前的基礎上進行縮放,有時間會需要復原原來的縮放比例,就牽扯到qgraphicsview的復原,查找資料,在網上找到一個解決方案,貼在下面,望大家可以學習。
先了解qmatrix,qmatrix包含有6個參數,具體可以查看文檔,簡單來說
m11 - 水平縮放
m12 - 垂直拉伸
m21 - 水平拉伸
m22 - 垂直縮放
dx - 水平位移
dy - 垂直位移
可以通過qgraphicsview::setmatrix函數來設置比例復原,主要是修改qmatrix的m11和m22來調整。
復原setmatrix
pview->settransformationanchor(qgraphicsview::anchorviewcenter);
qmatrix matrix;
matrix.setmatrix(1, pview->matrix().m12(), pview->matrix().m21(), 1, pview->matrix().dx(), pview->matrix().dy());
pview->setmatrix(matrix, false);
到此這篇關于qt通過qgraphicsview實現簡單縮放及還原效果的文章就介紹到這了,更多相關qt qgraphicsview縮放及還原內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/ybqjymy/p/15271590.html