Qt修炼手册6_图形:图形视图框架
1.前言
主要為了學習可以在GUI上有效顯示或管理大量圖形對象的API,以及進行顯示、擴大、縮小等操作。
2.圖形視圖框架(Graphics View Framework)
圖形視圖框架使用BSP樹算法。BSP是一種將空間分為兩部分的算法,其原理是通過二叉樹形態分析大的地形,以構成節點信息,并參照此信息找出要繪制的對象。
使用BSP算法的圖形視圖可以快速發現圖形對象。因此,通過Surface使用圖形視圖可以在GUI上快速繪制甚至數百個圖形對象。
2.1 圖形圖像框架的基本要素
為了創建給予圖形視圖框架的應用程序,Qt提供了如下的類:
- QGraphicsView:是為了在場景上顯示控件而提供的類。QGraphicsView包括可視視圖控件區域和用于顯示大場景的滾動條區域。視圖接受用戶點擊和觸摸輸入事件,而且,發送可視視圖區域中發生的輸入事件之前,可以控制場景事件。
- QGraphicsScene:可以保存控件,也可以處理鍵盤和觸摸事件,還可以管理對象的焦點狀態或被選中對象等的狀態。
- QGraphicsItem:是為了在圖形視圖上實現圖形對象而提供的類。QGraphicsItem提供成組管理圖形對象的界面,以及顯示矩形等形狀的典型圖形管理項目的QGraphicsRectItem類、像是橢圓圖形對象的QGraphicsEllipseItem類、顯示文本對象的QGraphicsTextItem類。
2.2 圖形視圖框架簡單實例
#include "widget.h" #include <QtWidgets/QApplication> #include <qgraphicsview.h> //場景中現實空間提供的類 #include <qgraphicsscene.h> int main(int argc, char *argv[]) {QApplication a(argc, argv);QGraphicsScene scene;scene.addText("I love Qt programming.",QFont("Times",22,QFont::Bold));QGraphicsView view(&scene);view.show();return a.exec(); }輸出結果: int main(int argc, char *argv[]) {QApplication a(argc, argv);QPainterPath path; //定義圖形path.moveTo(340,30);path.cubicTo(340,30,350,5,400,30);QGraphicsScene scene; //定義場景scene.addText("I love Qt programming.",QFont("Times",22,QFont::Bold));scene.addPath(path,QPen(Qt::blue),QBrush(Qt::red)); //添加圖形到場景中,并進行個性化設置QGraphicsView view(&scene);view.show();return a.exec(); } 輸出結果:
3.圖形視圖架構的設計思想
圖形視圖可以通過基于圖形對象的方式實現模型/視圖的編程模式。例如,圖形視圖可以通過QTableView、QTreeView、QListView等輔助類顯示圖形對象。而且場景包含了許多幾何圖形。
QGraphicsScene提供了圖形視圖場景管理器(Graphics View Scene),場景管理器實際上就是圖形對象QGraphicsItem的容器。調用QGraphicsScene類的addItem()添加對象,調用Items()函數可以查找大量對象中的任意對象。
對象上可以使用鍵盤和焦點。調用函數SetFocusItem()可以將焦點移動到選擇的圖形對象,函數SetFocus()具有相同功能。
還有一點需要注意,QGraphicsScene允許通過QGraphicsScene類的函數render()將部分場景繪制到繪圖設備。
3.1 什么是視圖?
QGraphicsView類提供了視圖控件,用于顯示場景中的對象。在同一場景可以訪問不同視圖,視圖控件為顯示區域提供了滾動條。視圖控件可以在QWidget類派生的QGLWidget上使用函數setViewPort()。
3.2 圖形對象都包括了哪些?
QGraphicsItem是場景中圖形對象的上層類。圖形視圖已經提供了一些標準圖形的類,例如矩形類(QGraphicsRectItem)、橢圓類(QGraphicsEllipseItem)、文本對象類(QGraphicsTextItem)。
對于自定義的用戶而言,更常用的還是最基礎的類——QGraphicsItem。因為他可以使用我們指定的對象,也就是說我們可以創建具有獨特風格的形狀。
總結一下,QGraphicsItem提供了以下功能:
- 支持鼠標按下、移動、釋放和雙擊,同事還支持鼠標滾輪事件、懸浮事件、上下文菜單事件。
- 提供鍵盤輸入事件和焦點事件。
- 支持拖放。
- 通過父對象和子對象進行組合。
- 支持碰撞檢測。
總結
以上是生活随笔為你收集整理的Qt修炼手册6_图形:图形视图框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【飞秋】Asp.net MVC2 mod
- 下一篇: 深圳南山区法院受理11人集体诉腾讯案