未调用 QGraphicsItem 绘制

Posted

技术标签:

【中文标题】未调用 QGraphicsItem 绘制【英文标题】:QGraphicsItem paint not called 【发布时间】:2013-05-11 13:15:41 【问题描述】:

我使用QGraphicsViewQGrapichsSceneQGraphicsItem 来绘制一些图表。我已经实现了QGraphicsItem::paint 函数来绘制文本(图表的值),但它并不是每次都必须绘制新的东西时被调用。我的paint函数

    void CLabelItem::paint(QPainter *painter, 
const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget = 0*/)


    if ( GetValue() < 0 )
    
        return;
    
    painter->drawText(boundingRect(), m_value.toString());

所以我的问题是 - 为什么不能调用 QGraphicsItem::paint 以及如何才能调用它?

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的回答,它成功了!但是现在还有另一个问题——QGraphicsItem::paint 并没有被所有项目调用,尽管它们都有正确的边界矩形。你也可以帮忙吗? @nabroyan 这些项目的边界矩形是否在重绘之间改变?因为在这种情况下您需要调用prepareGeometryChange()(除了update())。 我知道了,计算边界矩形时出错了。【参考方案2】:

通常在调用paintEvent 时绘制Qt 图形项目,然后您可以在paint 函数内处理绘制。

【讨论】:

以上是关于未调用 QGraphicsItem 绘制的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4 - 拖动后 QGraphicsItem 位置未正确映射到场景中

从 QGraphicsItem 派生类绘制 QGraphicsScene

关于Qgraphicsitem的update函数问题。

Qt QGraphicsItem 在单独类的 boundingRect() 内绘制多边形?

Qt:强制 QGraphicsItem 更新

QT软件开发: 重载QGraphicsItem的type()函数