激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Qt通過QGraphicsview實現簡單縮放及還原效果

Qt通過QGraphicsview實現簡單縮放及還原效果

2022-01-06 00:37一杯清酒邀明月 Python

本文主要介紹通過QGraphicsview實現簡單的縮放以及縮放后還原原始大小,通過scale可以對view進行放大或縮小,具體內容詳情跟隨小編一起看看吧

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

Qt通過QGraphicsview實現簡單縮放及還原效果

可以看到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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 媚药按摩痉挛w中文字幕 | 久国久产久精永久网页 | 麻豆传传媒久久久爱 | 玖草 | 色域tv| 中日韩乱码一二新区 | 成人在线网站 | 色女生影院 | 欧美成人高清视频 | 欧美色视频免费 | h视频免费观看 | 欧美精品一区二区三区四区 | 成年毛片| 国产精品亚洲欧美一级在线 | 久久出精品 | 国产精品午夜未成人免费观看 | 欧美亚洲综合网 | 国产99久久久国产精品 | 欧美一级黄色影院 | 日本最新免费二区三区 | 美乳在线观看 | 黄色视频a级毛片 | 欧美一级视频在线 | chinese hd xxxx tube| 福利免费在线 | 在线看免费观看日本 | 激情在线免费观看 | 看一级大毛片 | 久久艹一区 | 鲁久久 | 依依成人综合 | 欧美精品日日鲁夜夜添 | 欧美激情性色生活片在线观看 | 欧美日韩亚洲精品一区二区三区 | 91精品国产乱码久久久久久久久 | 一区二区免费 | 1区2区3区国产 | 色妞妞视频 | 欧美一级毛片免费观看 | 一区二区三区在线播放视频 | www国产网站 |