我有一个非常简单的代码,用于在Qt图表示例应用程序的启发下绘制图形顶点之间的箭头,但我有渲染工件的问题。当我使用以下代码
在场景上绘制三角形多边形时QPolygonF arrowHead;
... some setup
painter->drawPolygon(arrowHead);
然后我移动三角形(arrowHead
多边形)所指向的顶点,它会重新绘制,但旧的三角形仍然会在屏幕上呈现
scene
上的任何更新都会解决问题(在后台拖动或从其他地方调用update/invalidate
)。
问题在于我不知道在何处强制更新,或者如何告诉Qt使被拖动的顶点周围的整个区域无效。
我已尝试从顶点上的scene()->invalidate()
事件调用itemChange
(也更新),因为它被拖动,但这会导致整个应用程序崩溃,所以我假设我不被允许从那里调用更新。我也无法直接从箭头的update
方法调用paint
,因为这会在自己的paint
方法中无限递归。
我是否正确渲染,或者我是否需要以某种方式手动更新场景? Here's a link to the whole rendering source code,虽然我想我可能在绘画方面犯了一些基本错误。
答案 0 :(得分:1)
您没有提供边缘项目的正确边界矩形。您从EdgeGraphicsItem
派生QGraphicsLineItem
,但未覆盖boundingRect
。请确保您遵循文档,并且不要错过必要时调用prepareGeometryChange
。
答案 1 :(得分:0)
这就是诀窍:
添加
ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
到MainWindow
的构造函数。
使用此标志将强制QGraphicsView
更新整个视口。