QT中視窗 與視口的轉換

2021-06-21 03:59:09 字數 1234 閱讀 7298



在qpainter中存在兩個函式,分別是setwindow和setviewport,分別用來設定繪圖視窗和繪圖的視口。

首先要說明的是,這個視窗和視口和可能和其它地方說明的視窗和視口含義不一樣;另外,在《c++ gui qt4程式設計》一書中也沒用很詳細的講解這兩個概念。所以筆者經過測試,把相關知識描述如下:以在qwidget中繪圖為例,qwidget大小(600,600)。qt繪圖時,如果不顯式的指定視窗和視口,預設的視窗和視口都是(0,0,widget.width(),widget.height())。那麼視窗-視口變換過程中的線性關係是x' = x;y' = y;其中(x,y)是視窗中的座標,(x',y')是視口中的座標。那麼此時繪製的圖形是以乙個不變的關係繪製在qwidget上,沒有任何的平移等效果。

如果使用setwindow(-300,-300,600,600)和setviewport(-100,-100,600,600)之後呢,那麼這個視窗-視口的線性關係則需要重新計算了,怎麼計算?

設x'=ax+b;y'=cy+d; 那麼需要確定引數a,b,c,d。如何確定?

使用視窗座標和視口座標進行計算,在視窗(-300,-300,600,600)中,實際上是指定了視窗的兩個座標,左上角(-300,-300),右下角(300,300);在視口(-100,-100,600,600)中,指定了視口左上角座標(-100,-100),視口右下角(500,500).根據左上角對應左上角,右下角對應右下角的關係,得到:x方向上有:-100=-300a+b,500=300a+b,解得a=1,b=200;y方向有:-100=-300c+d,500=300c+d,解得c=1,d=200。  得到關係後再來繪圖則是經過該關係變換後的值了。

比如painter.drawpoint(0,10),對應x=0,得到x'=0*a+b=200;對應y=10,得到y'=10*c+d=210;即實際上是在widget的(200,210)處繪製了乙個點。

polyline和polygon的區別是什麼啊?
polygon能畫封閉的多邊形,而polyline不會首尾自動相連,形成封閉的圖形

QT視口和視窗

視口和視窗實際上是同一區域 視口使用的是物理座標,而視窗使用的是邏輯座標,可以無視widget的放大和縮小 int w width int h height int side qmin w,h 去長和寬的小值 qrect rect w side 2 h side 2 side,side viewpo...

視窗與視口

幾個概念容易亂,先寫下來 一般來說,客戶區左上角的點對應視口原點 0,0 我理解他們為等同關係.裝置區 0,0 點就是視口原點 0,0 點,且不可改變.視窗座標應用中使用邏輯座標,偶理解為視窗原點就是邏輯原點.等同關係.且可以改變.下面可能用上.不要理解為整個視窗的左上角那個點 從理解應用來說,無論...

OpenGL中的視窗與視口

目標 測試opengl視窗視口座標 結果 glutinitwindowsize 640,480 指定的是windows概念中視窗 看得見,可移動,最大化,最小化等操作 大小,以畫素為單位 opengl中的視窗和視口是邏輯上的概念,其中視窗範圍是畫圖時指定頂點座標使用的座標,而視口範圍是將window...