【发布时间】:2015-08-14 23:31:30
【问题描述】:
我的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);
我没有得到工件 - 但我认为这会影响性能,这是一个主要限制因素。
如何修复这些伪影 - 仅在特定情况下发生,减少笔宽/减少线的边界矩形,而不影响性能?
【问题讨论】:
标签: qt qgraphicsview qgraphicsitem artifacts