QT 座標變換

所謂座標變換就是給painter加上一些變換矩陣。比如,在調用了rotate(int angle)方法之後painter的世界被旋轉了一個角度,tanslate(int dx,int dy)之後painter的整個世界向右拖了dx,又向下拖了dy。所以,座標變換可以看做是painter當前的一個狀態,我們可以用save()方法把當前的狀態存到一個堆棧裏,在用過之後,再用restore()恢復,看一個例子。
 
?
painter->translate(50, 50);
painter->save();
painter->rotate(45);
painter->drawLine(0, -5, 0, -20);
painter->restore();
painter->drawLine(0, -5, 0, -20);
 
因爲座標變換會帶來浮點誤差,所以做好save,restore工作是必要的。
有趣的是,變換方法互相也會影響。
?
painter->setPen(QPen(Qt::black, 4));
painter->translate(50, 10);
painter->drawText(0, 0, tr("1"));
painter->translate(0, 50);
painter->drawRect(0,0,5,5);
painter->rotate(45);
painter->translate(0, -50);
painter->drawText(0, 0, tr("2"));
 
 我們可以用QTransform類把座標變化存下來,以便反覆使用。
?
QTransform transform;
transform.translate(50, 50);
transform.rotate(45);
painter->setWorldTransform(transform);
painter->drawLine(0, -5, 0, -20);
還有一個有用的方法是painter的worldTransform(),能得到這個畫筆當前的變換矩陣。
發佈了19 篇原創文章 · 獲贊 22 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章