QGraphicsItem paint not called
问题描述:
我使用QGraphicsView
,QGrapichsScene
和QGraphicsItem
来绘制一些图表。我已经实现QGraphicsItem::paint
函数来绘制文本(图表的值),但是它不会在每次必须绘制新东西时被调用。我paint
功能QGraphicsItem paint not called
void CLabelItem::paint(QPainter *painter,
const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget = 0*/)
{
if (GetValue() < 0)
{
return;
}
painter->drawText(boundingRect(), m_value.toString());
}
所以我的问题是 - 为什么QGraphicsItem::paint
可以不叫,我怎么可能使它被称为?
答
您需要从修改m_value
变量触发重绘的函数调用QGraphicsItem::update()
。
答
一般用Qt绘制的图形项目是在调用paintEvent
时绘制的,然后就可以在paint
函数内处理绘画了。
感谢您的答案,它的工作!但现在又出现了另一个问题 - 所有项目都没有调用“QGraphicsItem :: paint”,尽管它们都有正确的边界矩阵。你能帮忙吗? – nabroyan 2013-05-11 21:36:19
@nabroyan这些项目的边界扭曲是否在重绘之间改变?因为在这种情况下(除了'update()'),你需要调用'prepareGeometryChange()'。 – alexisdm 2013-05-11 21:44:02
我明白了,这是计算边界矩的错误。 – nabroyan 2013-05-12 08:15:50