避免带有子项的 QGraphicsItem 无限重绘

Avoid QGraphicsItem with children from infinite repainting

我有一个 QGraphicsItem 元素(从 QGraphicsItem 继承 class),它有一个子元素 QGraphicsTextItem

问题是 QGraphicsItempaint(...) 方法被无限调用了。

这是我的 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" );
}

我无法将 setCacheModeQGraphicsItem::CacheMode::NoCache 以外的其他标志一起使用。

我正在使用 Qt 5.6。

更新:

您在父项的 paint() 方法中设置了 text_item 的文本,这似乎反过来触发了父项的重绘,从而形成了一个无限循环。通常,在绘制操作期间更改项目不是一个好主意。请记住,paint() 方法可以被高频率调用。

可能有一些事件触发了 text_item 文本更改的需要,例如用户交互,这又调用了一个插槽。这是您应该设置文本的位置。文本本身的绘制由 QGraphicsTextItem.

处理