QGraphicsLineItem直接继承于图元基类QGraphicsItem,它的使用也十分简单。提供的设置接口很少,一个setLine和一个setPen就没了。

blob.png

对于QGraphicsLineItem的使用真没什么可说的。不过值得一提的是QGraphicsLineItem的形状计算的很不错。什么叫形状不错?这就要从图元的祖先QGraphicsItem说起了,QGraphicsItem提供了一个虚函数virtual QPainterPath shape() const,用于返回图元的形状。shape函数的返回值是QPainterPath,可以很精确的表达出图元的轮廓。 图元的轮廓会直接影响到图元的事件,比如鼠标点击事件,当鼠标点击在图元的轮廓内才会触发图元的鼠标点击事件。QGraphicsLineItem虽然看上去只是一条直线,实际上它的形状是一个多边形,因为计算时需要把pen的宽度考虑进去。


QGraphicsLineItem很好的实现了shape()函数,可以通过它的hover事件来看看效果。为了更好的看清效果我们重写了QGraphicsView类,在滚轮事件中对视图进行缩放。

blob.png


接着重写QGraphicsLineItem的两个hover事件。

blob.png

要想获取图元的hover事件还需要调用函数setAcceptHoverEvents(true)。 

运行程序后放大视图来查看效果:

blob.png

可以看到鼠标刚进入直线图元的shape区域内就变成绿色了,确实计算的很准确。