日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

QT学习之图形视图框架

發布時間:2023/11/28 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT学习之图形视图框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 坐標系統
    • 圖形項坐標
    • 場景坐標
    • 視圖坐標
    • 坐標映射
  • 事件處理與傳播
  • QGraphicsScene 管理 QGraphicsItem(單擊/選擇/移動/縮放/刪除)
  • 參考

坐標系統

圖形項坐標

圖元生活在自己的局部坐標系。它們的坐標通常圍繞它們的中心點(0, 0),并且這也是所有轉換的中心。圖元坐標系下的幾何元素通常指點、線或矩形。

創建自定義圖元時,只需考慮圖元坐標即可。QGraphicsScene和QGraphicsView會為你實現所有相關的轉換,這樣一來,實現自定義圖元就容易多了。例如:當你接收到鼠標按下或拖拽事件時,事件位置將由圖元坐標給出。如果某一點(傳遞一個圖元坐標作為參數)在圖元中,那么GraphicsItem::contains()虛函數將會返回true;否則,返回false。同樣的,項綁定的矩形或形狀區域也是項坐標系統的。同樣的,圖元的矩形邊界和形狀都是基于圖元坐標的。

圖元的位置是圖元的中心點在其父坐標系下的坐標,有時也被稱為父坐標。場景從這個意義上說是所有無父圖元的“parent”,頂層圖元的位置在場景坐標中。

子坐標是相對于父坐標而言的。如果子坐標沒有轉換,那么子坐標和父坐標的差異就和圖元在父坐標中的距離一樣。例如:一個未經轉換的子圖元正好位于父圖元的中心點,那么,這兩個圖元的坐標系是完全一樣的。如果子圖元的位置是(10, 0),那么子圖元的(0, 10)點就對應父圖元的(10, 10)點位置。

由于圖元的位置和轉換是相對于父圖元來說的,因此,雖然父圖元的轉換隱式地轉換了子圖元,但是子圖元的坐標不會因父圖元的轉換而受到影響。在上述示例中,即使父圖元經過了旋轉和縮放,子圖元的(0, 10)點始終對應父圖元的(10, 10)點。不過相對于場景來說,子圖元將隨著父圖元進行轉換和偏移 。如果父圖元縮放了(2x, 2x),那么子圖元在場景中的坐標是(20, 0),并且其(10, 0)點將會對應于場景中的(40, 0)點。

不管圖元或父圖元進行了怎樣的轉換,QGraphicsItem的函數操作都在圖元坐標內。例如:一個圖元的矩形邊界(QGraphicsItem::boundingRect())總是在圖元坐標下給出。但是QGraphicsItem::pos()是例外之一,該函數表示其在父圖元中的位置 。

場景坐標

場景為所有的圖元提供了基礎的坐標系。場景坐標系描述了每一個頂層圖元的位置,同時構成了從視圖傳遞到場景的所有場景事件的基礎。場景中的每個圖元都有一個場景位置和矩形邊界(QGraphicsItem::scenePos()、QGraphicsItem::sceneBoundingRect());另外,也有其自身的位置和矩形邊界。場景位置描述了圖元在場景坐標下內的位置,場景矩形邊界則提供給QGraphicsScene來決定場景中的哪塊區域已經被改變了。場景中的變化通過QGraphicsScene::changed()信號發出,參數是場景矩形列表。

視圖坐標

視圖坐標是部件的坐標,視圖坐標中的每個單位對應一個像素。對于該坐標系來說比較特殊的一點是:它相對于部件或視口,不會受被觀察的場景所影響。QGraphicsView的視口左上角總是(0, 0),右下角總是(viewport width, viewport height)。所有的鼠標事件和拖拽事件都以視圖坐標接收到的,你需要將這些坐標映射到場景,以便于和圖元進行交互。

坐標映射


事件處理與傳播

QGraphicsScene 管理 QGraphicsItem(單擊/選擇/移動/縮放/刪除)

學習見鏈接
如果想讓場景使用橡皮筋進行框選,則可以使用:

setDragMode(QGraphicsView::RubberBandDrag);

但是圖形項不能設置成:

setFlag(QGraphicsItem::ItemIsFocusable);

而是應該設置成:

setFlag(QGraphicsItem::ItemIsSelectable);

這里提供一份代碼:可以使用

使用shift+鼠標左鍵單選
使用ctrl+鼠標左鍵多選
使用鼠標的橡皮筋進行多選

參考

https://blog.csdn.net/liang19890820/article/details/51966791

總結

以上是生活随笔為你收集整理的QT学习之图形视图框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。