Qt圖形檢視框架直線圖元QGraphicsLineItem

QGraphicsLineItem直接繼承於圖元基類QGraphicsItem,它的使用也十分簡單。提供的設定介面很少,一個setLine和一個setPen就沒了。

Qt圖形檢視框架直線圖元QGraphicsLineItem

對於QGraphicsLineItem的使用真沒什麼可說的。不過值得一提的是QGraphicsLineItem的形狀計算的很不錯。什麼叫形狀不錯?這就要從圖元的祖先QGraphicsItem說起了,QGraphicsItem提供了一個虛擬函式virtual QPainterPath shape() const,用於返回圖元的形狀。shape函式的返回值是QPainterPath,可以很精確的表達出圖元的輪廓。 圖元的輪廓會直接影響到圖元的事件,比如滑鼠點選事件,當滑鼠點選在圖元的輪廓內才會觸發圖元的滑鼠點選事件。QGraphicsLineItem雖然看上去只是一條直線,實際上它的形狀是一個多邊形,因為計算時需要把pen的寬度考慮進去。

QGraphicsLineItem很好的實現了shape()函式,可以透過它的hover事件來看看效果。為了更好的看清效果我們重寫了QGraphicsView類,在滾輪事件中對檢視進行縮放。

Qt圖形檢視框架直線圖元QGraphicsLineItem

接著重寫QGraphicsLineItem的兩個hover事件。

Qt圖形檢視框架直線圖元QGraphicsLineItem

要想獲取圖元的hover事件還需要呼叫函式setAcceptHoverEvents(true)。

執行程式後放大檢視來檢視效果:

Qt圖形檢視框架直線圖元QGraphicsLineItem

可以看到滑鼠剛進入直線圖元的shape區域內就變成綠色了,確實計算的很準確。

我是fearlazy!文章內容僅代表個人觀點如有雷同純屬正常。

Qt圖形檢視框架直線圖元QGraphicsLineItem