从LineItem
继承的QGraphicsLineItem
可以更改其笔宽。
我创建了一个boundingRect
,它使用由基于笔宽和箭头计算的打击垫调整的QGraphicsLineItem::boundingRect
。它有效。
void LineItem::calculateStuff() // called on any change including pen width
{
qreal padLeft, padRight, padT;
padLeft = 0.5 * m_pen.width(); // if no arrows
padT = padLeft;
padRight = padLeft;
m_boundingRect = QGraphicsLineItem::boundingRect().adjusted(-padLeft, -padT, padRight, padT);
update();
}
QRectF LineItem::boundingRect() const
{
return m_boundingRect;
}
QPainterPath LineItem::shape() const
{
QPainterPath p;
p.addRect(m_boundingRect);
return p;
}
我只得到一件神器:
尽管它们很漂亮(严肃地说我认为它们是"功能:-)) - 我试图消除它们。我试图记住以前的边界矩形,并用前一个边界矩形更新项目 - 我认为这是选项的用途 - 但它没有用。
QRectF oldRect = selectedItem->boundingRect();
item->setItemPenWidth(p);
selectedItem->update(oldRect);
selectedItem->update();
我的视口有
setViewportUpdateMode(BoundingRectViewportUpdate);
如果我改为
setViewportUpdateMode(FullViewportUpdate);
我没有获得文物 - 但我认为这会影响性能,这是一个主要的限制因素。
如何修复这些工件 - 只会在特定情况下发生,减少笔宽/减少线的边界矩形,而不会影响性能?
答案 0 :(得分:3)
简单修复......我必须添加
prepareGeometryChange();
在我的calculateStuff()
函数中。
之前我没有看到任何更改,这是我第一次更改boundingRect时它无法无缝更新。