-1

我有一个QGraphicsItem元素(从 子类化QGraphicsItem)作为子元素 a QGraphicsTextItem

问题是该paint(...)方法QGraphicsItem被无限调用。

这是我的QGraphicsItem元素中的paint方法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。

更新:

  • 是类的text_item成员,它在初始化列表中被初始化。
4

1 回答 1

2

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

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

于 2016-09-02T07:17:07.507 回答