掌握 QPainter 座標系統是精準繪圖的關鍵。預設座標原點 (0,0) 位於視窗左上角,X 軸向右、Y 軸向下,單位為像素。但像素中心實際位於「半像素座標」:像素 (x,y) 中心在 (x+0.5, y+0.5)。
關閉反鋸齒時,繪製 (100,100) 像素,中心實際在 (100.5, 100.5);開啟反鋸齒則會在四鄰域像素混合,視覺中心落在 (100,100)。若需精準控制,需將座標系平移 (0.5, 0.5)。

上圖對比:無反鋸齒、有反鋸齒、平移座標後有反鋸齒三種情況下 drawRect(2,2,6,5) 的像素覆蓋差異。筆寬 (Pen width) 也會影響實際繪製範圍。
QPainter 提供 setViewport()(物理座標)與 setWindow()(邏輯座標),實現與裝置解析度無關的繪圖。預設兩者一致。範例:在 320×200 元件中設定邏輯座標 (-50,-50) 到 (+50,+50),原點置中:
painter.setWindow(-50, -50, 100, 100);
邏輯座標 100×100 映射到物理 320×200。改變 window 範圍即可縮放、平移繪圖內容,無需修改繪圖邏輯。

透過 QTransform 操作世界座標系,實現平移、縮放、旋轉、剪切。關鍵概念:**變換的是座標系,而非圖形本身**。
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QFont font("Courier", 24);
painter.setFont(font);
painter.drawText(50, 50, "Hello, world!");
QTransform transform;
transform.rotate(+45.0); // 順時針旋轉 45 度
painter.setWorldTransform(transform);
painter.drawText(60, 60, "Hello, world!");
}

第二行文字隨座標系旋轉 45°。QPainter 為狀態機,變換僅影響後續繪圖操作。注意 drawText() 座標為文字**左下角**基線位置(非左上角)。