【发布时间】:2017-01-09 12:11:29
【问题描述】:
我有一个 QGraphicsItem 元素(从 QGraphicsItem 子类化),它的子元素是 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是该类的成员,它在初始化列表中被初始化。
【问题讨论】:
-
为什么每次画画都要创建一个孩子?在构造函数中创建子节点
-
@Fabio - 更新了问题。
QGraphicsTextItem是 calss 的成员。 -
再一次,为什么每次绘制item时都要设置子文本?
-
所以每次绘制矩形时,设置
text_item的文本。这可能会导致父项重绘,这可能是无限循环的原因。通常,在绘制操作期间更改项目不是一个好主意。请记住,paint方法的调用频率很高。 -
取决于何时应该更改。如果文本在项目的生命周期内相同,则在创建时设置它。否则,可能会出现某种触发文本更改的事件,因此请在此处设置文本。文字本身的绘制应该由
QGraphicsTextItem处理。
标签: c++ qt qgraphicsitem qpainter qgraphicstextitem