2014-10-06 152 views
0

我在我的圖形場景中繪製一個橢圓。當橢圓傾斜時,其邊界的一部分不會立即出現。在重新調整窗口大小或在圖形場景中執行放大或縮小操作後,橢圓邊界會更新,並獲得所需的完美形狀。QGraphicsScene不立即更新

我已經定義我的塗料函數爲我的橢圓爲:

QPainterPath ellipse; 
ellipse.moveTo(p1.x()+majRadius, p1.y()); 
ellipse.arcTo(boundingRect(), 0 , 360); 
QPen paintpen(Qt::black); 
paintpen.setWidth(1); 
painter->setRenderHint(QPainter::Antialiasing); 
painter->setPen(paintpen); 
painter->save(); 
painter->translate(p1.x(), p1.y()); 
painter->rotate(theta); 
painter->translate(-p1.x(), -p1.y()); 
painter->drawPath(ellipse); 
painter->restore(); 

我的邊界矩形的定義是:

return QRectF(p1.x()-majRadius, p1.y()-minRadius, 
       2*majRadius, 2*minRadius).normalized(); 

我已附加的橢圓兩例的屏幕截圖: enter image description here

如何解決這個問題?

回答

2

你沒有顯示重要的代碼,但我想我可以猜測出現了什麼問題。

當您更改QGraphicsItem一些財產對QGraphicsItem::boundingRect()影響,你應該叫QGraphicsItem::prepareGeometryChange不僅沒有update
請參閱QGraphicsItem::boundingRect的文檔。

我看到的第二個問題是你已經搞亂了旋轉平移和邊界矩形。嘗試旋轉畫家路徑而不是畫家本身。

我可以看到的另一個問題是,你正在挽救和恢復一個錯誤的代理畫家。在對畫家進行任何更改之前,應該先進行保存(在您的情況下,painter->setRenderHint(QPainter::Antialiasing);)之前,並且在完成畫的項目完成後恢復其狀態(這是好的)

+0

感謝您指出瞭如此多的錯誤。如果你可以提供一些提示,我將無法知道如何使用它。 – 2014-10-06 13:58:50

+0

我應該在哪裏調用preparegeometrychange函數? – 2014-10-06 15:38:20

+0

每種方法都會影響到'p1','majRadius','minRadius'和'theta'對'boundingRect()'有影響,所以這個方法應該調用'preparegeometrychange'。 – 2014-10-06 21:13:08