作者:多米音乐_34058991 | 来源:互联网 | 2023-08-14 16:59
原标题: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 setTransformationAnchorwww.yii666.com(QGraphicsView::AnchorUnderMouse);
14 qreal factor = transform().scale(scaleFactor, scaleFactor).mapR文章来源地址26044.htmlect(QRectF(0, 0, 1, 1)).width();
15 if (factor <0.01 || factor >文章来源地址26044.html; 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 - 垂直位移
通过这些参数,我们可以知道我们所需要调节的只有m文章来源站点https://www.yii666.com/11和m22,则把这两个参数设为1,不改变
1 void MainWindow::Original()
2 www.yii666.com{
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 QGraphicsview缩放及还原