QT入門(六) GraphicsView控制元件的使用
GraphicsView框架結構主要包括三個類:QGraphicsScene(場景)、QGraphicsView(檢視)、QGraphicsItem(圖元)。
主要應用方式是:GraphicsView繪圖時首先建立一個場景,然後建立圖元物件(如一個直線物件、一個多邊形物件),再使用場景的add()函式,將圖元物件新增到場景中,最後通過檢視進行顯示,部分程式碼如下:
QGraphicsScene *scene = new QGraphicsScene; scene->addPixmap(QPixmap::fromImage(*image)); ui->graphicsView->setScene(scene); ui->graphicsView->resize(image->width() + 10, image->height() + 10); ui->graphicsView->show();
分別介紹三個類:
一、QGraphicsScene(場景)
QGraphicsScene是不可見的,只用於管理圖元。為了檢視場景,需要建立一個檢視元件。
一個場景分為三個層:圖元層、前景層和背景層。場景的繪製總是從背景層開始,然後是圖形項層,最後是前景層。
主要功能如下:
1、管理大量圖元,查詢,新增,移動和刪除等動作。
2、傳遞滑鼠和鍵盤事件給圖元。
二、QGraphicsView(檢視)
1、 QGraphicsView是檢視視窗部件,使場景內容視覺化,可以連線多個檢視到一個場景,也可以為相同資料來源的資料集提供不同的檢視。
2、檢視接收鍵盤和滑鼠的輸入事件,並把事件翻譯為場景事件(將座標轉換為場景的座標),再發送到場景。
三、QGraphicsItem(圖元)
1、QGraphicsItem是圖元的基類。QGraphics View框架提供了多種標準的圖元: QGraphicsEllipseItem(橢圓)、QGraphicsSimpleTextItem(簡單文字圖元)等
2、支援滑鼠和鍵盤事件,支援碰撞檢測
3、向場景中新增圖元(需要引用標頭檔案qgraphicsitem.h)
QGraphicsScene* originalScene = new QGraphicsScene(this);
QGraphicsRectItem* rect0 = new QGraphicsRectItem(1, 2, 1000, 1000, 0);
Scene->addItem(rect0);
Scene->itemAt(100, 100, QTransform());
四、GraphicsView的座標系統
分別包括圖元座標系、場景座標系、製圖座標系,座標變換函式如下:
QGraphicsView::mapToScene()檢視到場景
QGraphicsView::mapFromScene() 場景到檢視
QGraphicsItem::mapFromScene() 場景到圖元
QGraphicsItem::mapToScene() 圖元到場景
QGraphicsItem::mapToParent() 子圖元到父圖元
QGraphicsItem::mapFromParent() 父圖元到子圖元
QGraphicsItem::mapToItem()本圖元到其他圖元
QGraphicsItem::mapFromItem()其他圖元到本圖元