Tha*_*lia 5 qt artifacts qgraphicsview qgraphicsitem
我的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;
}
Run Code Online (Sandbox Code Playgroud)
我得到的只有一件神器:
尽管它们很漂亮(严肃地说我认为它们是"功能:-)) - 我试图消除它们.我试图记住以前的边界矩形,并用前一个边界矩形更新项目 - 我认为这是什么选项是为了 - 但它不起作用.
QRectF oldRect = selectedItem->boundingRect();
item->setItemPenWidth(p);
selectedItem->update(oldRect);
selectedItem->update();
Run Code Online (Sandbox Code Playgroud)
我的视口有
setViewportUpdateMode(BoundingRectViewportUpdate);
Run Code Online (Sandbox Code Playgroud)
如果我换到
setViewportUpdateMode(FullViewportUpdate);
Run Code Online (Sandbox Code Playgroud)
我没有得到文物 - 但我认为这会影响性能,这是一个主要的限制因素.
如何修复这些工件 - 仅在特定情况下发生,减小笔宽/减少线的边界矩形,而不影响性能?
简单的修复...我必须添加
prepareGeometryChange();
Run Code Online (Sandbox Code Playgroud)
在我的calculateStuff()职能中。
我之前没有看到任何变化,这是我第一次改变我的boundingRect,它不能无缝更新。
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |