Qt學習---視口和視窗的理解
阿新 • • 發佈:2019-02-10
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)部分。
放大或是縮小視口,線段也是成比例變化。具體比例的換算可以參考其它文章。