2008年12月28日 星期日

Qt - 在座標不動,放大縮小

為了要顯示無線網路的無線波,必需要知道如何讓空心圓在原地放大縮小。

因此,透過scale可以放大縮小整個圖的某一個元件。

在每一個GraphicsItem都有一個自己的座標系統,而放大縮小與旋轉都是依自己的座標系統的原點來決定的。

例如以下的程式碼:

QGraphicsEllipseItem *ball = new QGraphicsEllipseItem(0,0,30,30);

就是建立一個直徑為30pixel的圓,且其左上角剛好在自已的座標系統的(0,0)
若這個時候用放大的話,會依原點放大,所有,它會往右下角放大


QGraphicsEllipseItem *ball = new QGraphicsEllipseItem(-15,-15,30,30);

這個因為設定圖的左上角是在此小座標系統的(-15,-15),所以,(0,0)剛好是在圖的球心,這個時候放大,就會根據原點放大~

而把這一個放到QGraphicsScene的(0,0),則要在QGraphicsScene的函數中

MyScene::MyScene(qreal x,qreal y,qreal width,qreal height,QObject *parent):QGraphicsScene(x,y,width,height,parent) {
  QGraphicsEllipseItem *ball = new QGraphicsEllipseItem(-15,-15,30,30);
  addItem(ball); // 把這一個圓加入此QGraphicsScene中
  ball->setPos(this->width()/2,this->height()/2); // 設定球的小座標系統的左上角落在QGraphicsScene的(width()/2,this->height()/2)這一個位置
}

沒有留言: