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的type()函数