4
我的LineItem
繼承自QGraphicsLineItem
可以更改其筆寬。QGraphicsItem在更改boundingRect時留下僞像
我已經創建了一個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);
我沒有得到神器 - 但我認爲這會影響性能,這是一個主要的制約因素。
我該如何解決這些工件 - 只發生在特定情況下,減少筆寬/減少線的邊界矩,而不影響性能?
在調用'prepareGeometryChange'之前更改邊界矩形是未定義的行爲。當然,你以前可能沒有看到過不良效果:這就是未定義的行爲。要感謝它沒有格式化你的硬盤驅動器(未定義的行爲可能導致它,就其性質而言)。 –
@KubaOber我認爲它確實......有一次...: - )...所以我必須在每次更改'boundingRect'之前調用它,對於每個屬性......當我說我沒有看到的變化,我包括這樣的事實,即使沒有這個調用,調整行大小或添加箭頭實際上不留下任何文物,這是令人費解的。 – Thalia