QGraphicsItem绘制问题

Posted

技术标签:

【中文标题】QGraphicsItem绘制问题【英文标题】:QGraphicsItem drawing problem 【发布时间】:2011-05-18 16:31:35 【问题描述】:

为了学习 Qt,我正在开发一款小型塔防游戏。我正在使用 QGraphicsScene 来保存游戏的所有对象。为了让它们移动,我没有使用 Animation 框架,而是调用了 Advance() 方法和 QTimer。

我想让我的射弹在击中敌人时爆炸。问题是当我试图绘制一个椭圆来模拟爆炸时,它没有被正确绘制。

你可以在this video看到问题。

我尝试使用 z-indexes,但它没有改变任何东西。

这是我用来绘制弹丸的代码:

void Projectile::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

    if(!isExploding) 
        painter->drawPixmap(boundingRect().toRect(), image);
     else 
        if(cnt < 50) 
            painter->setBrush(QBrush(explosion));
            painter->drawEllipse(-cnt, -cnt, 2.0*cnt, 2.0*cnt);
            cnt++;
         else 
            this->isFinished = 1;
        
    


QRectF Projectile::boundingRect() const

    // Taille de l'image de l'insecte
    return QRectF(0, 0, 6, 6);

你有什么线索可以解决这个问题吗?

谢谢。

【问题讨论】:

不看你的代码很难说;但根据我的经验,错误地指定图形项的 boundingRect 可能会导致伪影和奇怪的剪辑。 【参考方案1】:

假设 cnt 是 3。 你正在用

画一个椭圆
painter->drawEllipse(-3,-3,6,6)

这需要一个宽度和高度至少为 9 的 boundingRect。 此外,boundingRect 是使用内部项目坐标系指定的。您正在从 (-3,-3) 绘制到 boundingRect 之外的 (6,6)。

【讨论】:

nitpick: drawEllipse(-3,-3,6,6)(-3,-3) 绘制到 (+3,+3),因此它适合 7×7 边界矩形。

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

从 QGraphicsItem 派生类绘制 QGraphicsScene

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

Qt:强制 QGraphicsItem 更新

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

PySide2 中的 QGraphicsItem.itemClipsChildrenToShape 问题

删除和释放 QGraphicsItem 类派生对象