2013-05-11 143 views
1

我使用QGraphicsView,QGrapichsSceneQGraphicsItem来绘制一些图表。我已经实现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可以不叫,我怎么可能使它被称为?

回答

2

您需要从修改m_value变量触发重绘的函数调用QGraphicsItem::update()

+0

感谢您的答案,它的工作!但现在又出现了另一个问题 - 所有项目都没有调用“QGraphicsItem :: paint”,尽管它们都有正确的边界矩阵。你能帮忙吗? – nabroyan 2013-05-11 21:36:19

+1

@nabroyan这些项目的边界扭曲是否在重绘之间改变?因为在这种情况下(除了'update()'),你需要调用'prepareGeometryChange()'。 – alexisdm 2013-05-11 21:44:02

+0

我明白了,这是计算边界矩的错误。 – nabroyan 2013-05-12 08:15:50

0

一般用Qt绘制的图形项目是在调用paintEvent时绘制的,然后就可以在paint函数内处理绘画了。