Qt 繪圖系統的壓軸登場——**Graphics View Framework**。它採用 Item-Based 架構與 Model-View 設計,支援百萬級圖形物件即時操作、多視圖同步觀察、縮放旋轉無失真,是 KDE Plasma 桌面、專業繪圖軟體的核心基礎。
| 特性 | QPainter 即時模式 | Graphics View 保留模式 |
|---|---|---|
| 程式設計範式 | 面向過程 (drawLine, drawRect...) | 面向物件 (Item 實體) |
| 物件管理 | 開發者自行管理列表/狀態 | Scene 自動管理 (增刪查改) |
| 複雜場景效能 | O(N) 重繪所有指令 | BSP 樹索引 O(log N) 可見性裁剪 |
| 多視圖支援 | 需手動計算座標轉換 | 一 Scene 多 View,自動同步 |
| 互動處理 | 自行處理滑鼠事件座標映射 | Item 直接接收場景座標事件 |
| 變換支援 | 手動矩陣運算 | 內建縮放/旋轉/剪切 |
QGraphicsLineItem、RectItem、EllipseItem、TextItem、PixmapItem、PathItem、PolygonItem 等int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 1. 建立場景
QGraphicsScene *scene = new QGraphicsScene;
// 2. 添加圖形項目 (座標為場景座標)
scene->addLine(10, 10, 150, 300); // 返回 QGraphicsLineItem*
scene->addRect(200, 50, 100, 80);
scene->addEllipse(400, 100, 120, 60);
// 3. 建立視圖並關聯場景
QGraphicsView *view = new QGraphicsView(scene);
view->resize(600, 400);
view->setWindowTitle("Graphics View Demo");
view->show();
return app.exec();
}

若需 Graphics View 行為如 QPainter:
view->setAlignment(Qt::AlignLeft | Qt::AlignTop); // 取消置中
view->setSceneRect(0, 0, 800, 600); // 固定場景矩形
滑鼠/螢幕座標 (View)
⇅ QGraphicsView::mapToScene() / mapFromScene()
場景座標 (Scene) ———— 所有 Item 位置、幾何運算基準
⇅ QGraphicsItem::mapToScene() / mapFromScene() / mapFromItem()
項目座標 (Item) ———— Item 內部繪圖、碰撞檢測、事件處理基準
scene->items(QRectF)、scene->itemAt(QPointF)、碰撞檢測皆為 **O(log N)**scene->setItemIndexMethod(QGraphicsScene::NoIndex) 關閉 (適合極動態場景)QGraphicsItem,實作 boundingRect()、paint()、shape()mousePressEvent、hoverEnterEvent、keyPressEvent 等 (場景座標)QPropertyAnimation 驅動 Item 的 pos、rotation、scale、opacityview->setViewport(new QOpenGLWidget) 啟用 GPU 渲染scene->render(&painter) 輸出至 QPrinter、QImage、QSvgGeneratorGraphics View 將 2D 繪圖從「畫指令」提升為「管物件」,是構建專業圖形應用 (CAD、EDA、地圖、設計工具) 的標準選擇。