1. 程式人生 > >Qt學習---視口和視窗的理解

Qt學習---視口和視窗的理解

1、首先視口與物理座標相對應,指的是我們在螢幕上看到的實際的一個個畫素點和其座標;視窗和邏輯座標相對應。在Qt中進行繪圖時,都是現在邏輯座標系中繪製好,然後在轉換到物理座標系(視口)上去,所以Qt中的繪圖函式的引數也都是針對邏輯座標的。

(1)、預設情況下,邏輯座標和物理座標的原點和單位長度是一致的,所以下面程式碼繪製:

QPainter painter(this);

	painter.setRenderHint(QPainter::Antialiasing,true);
	//定義線性漸變物件
	QLinearGradient linearGradient(0,0,200,200);
	linearGradient.setColorAt(0.2,Qt::white);
	linearGradient.setColorAt(0.6,Qt::green);
	linearGradient.setColorAt(01.0,Qt::black);
	painter.setPen(QPen(QBrush(linearGradient),5));

	painter.drawLine(0,0,100,100);

視口展現出來的繪製的線段大小永遠是不變的,長和寬都是100.

(2)、進行setwindow後:

QPainter painter(this);

	/*設定邏輯座標(50,50)對應裝置座標的原點
	 *設定邏輯寬(100)和高(100)分別對相應裝置的寬和高
	 *這樣視窗中的邏輯座標和視口中的物理座標總成一種
	 *對應的比例關係,和裝置的大小和解析度無關。 
	*/
	painter.setWindow(50,50,100,100);

	painter.setRenderHint(QPainter::Antialiasing,true);
	//定義線性漸變物件
	QLinearGradient linearGradient(0,0,200,200);
	linearGradient.setColorAt(0.2,Qt::white);
	linearGradient.setColorAt(0.6,Qt::green);
	linearGradient.setColorAt(01.0,Qt::black);
	painter.setPen(QPen(QBrush(linearGradient),5));

	painter.drawLine(0,0,100,100);

第一步,現在視窗中繪圖:


第二步,將視窗中的檢視按照比例轉換到視口中,其中視窗中的(50,50)對應到視口中的(0,0),所以只能在視口中看到線段的(50,50)--->(100,100)部分。


放大或是縮小視口,線段也是成比例變化。具體比例的換算可以參考其它文章。