避免带有子项的 QGraphicsItem 无限重绘
Avoid QGraphicsItem with children from infinite repainting
我有一个 QGraphicsItem
元素(从 QGraphicsItem
继承 class),它有一个子元素 QGraphicsTextItem
。
问题是 QGraphicsItem
的 paint(...)
方法被无限调用了。
这是我的 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
与 QGraphicsItem::CacheMode::NoCache
以外的其他标志一起使用。
我正在使用 Qt 5.6。
更新:
text_item
是class的成员,在初始化列表中初始化。
您在父项的 paint()
方法中设置了 text_item
的文本,这似乎反过来触发了父项的重绘,从而形成了一个无限循环。通常,在绘制操作期间更改项目不是一个好主意。请记住,paint()
方法可以被高频率调用。
可能有一些事件触发了 text_item
文本更改的需要,例如用户交互,这又调用了一个插槽。这是您应该设置文本的位置。文本本身的绘制由 QGraphicsTextItem
.
处理
我有一个 QGraphicsItem
元素(从 QGraphicsItem
继承 class),它有一个子元素 QGraphicsTextItem
。
问题是 QGraphicsItem
的 paint(...)
方法被无限调用了。
这是我的 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
与 QGraphicsItem::CacheMode::NoCache
以外的其他标志一起使用。
我正在使用 Qt 5.6。
更新:
text_item
是class的成员,在初始化列表中初始化。
您在父项的 paint()
方法中设置了 text_item
的文本,这似乎反过来触发了父项的重绘,从而形成了一个无限循环。通常,在绘制操作期间更改项目不是一个好主意。请记住,paint()
方法可以被高频率调用。
可能有一些事件触发了 text_item
文本更改的需要,例如用户交互,这又调用了一个插槽。这是您应该设置文本的位置。文本本身的绘制由 QGraphicsTextItem
.