避免QGraphicsItem与无限重画的儿童

时间:2016-09-01 14:34:05

标签: c++ qt qgraphicsitem qpainter qgraphicstextitem

我有一个QGraphicsItem元素(来自QGraphicsItem的子类),其子句为QGraphicsTextItem

问题是paint(...)的{​​{1}}方法被无限调用。

以下是我的QGraphicsItem元素与QGraphicsItem

的绘制方法
QGraphicsTextItem

我不能将void rectangle_element::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget ) { painter->drawRoundedRect( -10, -10, 80, 40, 5, 5 ); painter->drawStaticText( -10, -10, QStaticText( "some text" ) ); text_item->setPlainText( "more text" ); } setCacheMode之外的其他旗帜一起使用。

我使用的是Qt 5.6。

更新:

  • QGraphicsItem::CacheMode::NoCache是该类的成员,并在初始化列表中初始化。

1 个答案:

答案 0 :(得分:2)

您在父项的text_item方法中设置了paint()的文本,这似乎又触发了父项的重绘,从而创建了一个无限循环。通常,在油漆操作期间更换物品不是一个好主意。请记住,paint()方法可以高频率调用。

可能有一些事件触发了text_item的文本更改需求,就像用户交互一样,后者又调用了一个插槽。这是您应该设置文本的点。文本本身的绘制由QGraphicsTextItem处理。