Graphics View中有三個座標系統,即場景座標、視圖座標、圖形項座標。
場景座標
場景座標等價於QPainter的邏輯座標,一般以場景中心爲原點;視圖座標與設備座標相同,是物理座標,默認爲左上角爲原點;圖形項的座標是局部邏輯座標,一般以圖形項的中心爲原點。
一個圖形項的位置是其中心點在父座標中的座標,對於沒有父圖形項的圖形項,其父對象就是場景,圖形項的位置就是在場景中的座標。如果一個圖形項還是其他圖形項的父項,那麼父項進行座標轉換的時候,子項也做同樣的座標轉換。
視圖座標
視圖座標就是窗口界面的物理座標,單位是像素。視圖座標只與widget或視口有關,而與觀察的場景無關,左上角座標爲(0,0)
場景座標
場景是所有圖形項的基礎座標,場景座標描述了每個頂層圖形項的位置,創建場景時可以定義矩形區域的座標範圍。
_scene = new QGraphicsScene(-100, -100, 200, 200);
這樣就定義了一個左上角座標爲(-100,-100)寬度爲200,高度爲200 的矩形區域,單位是像素
QGraphicsView是用於觀察一個場景的物理窗口,當場景小於視圖時,整個場景在視圖中可見;當場景大於視圖時,視圖自動提供滾條。
示例代碼:
ui.graphicsView->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
_scene = new QGraphicsScene(-100, -100, 200, 200);
ui.graphicsView->setScene(_scene);
QPen pen;
pen.setWidth(2);
pen.setColor(QColor(255, 0, 0));
_scene->setBackgroundBrush(QBrush(Qt::gray));
_scene->addLine(-100, 0, 100, 0, pen);
_scene->addLine(0, -100, 0, 100, pen);
_scene->addEllipse(-25, -25, 50, 50, pen);