Qt 4.8 crash fix

This commit is contained in:
Max-Wilhelm Bruker 2012-04-27 00:03:08 +02:00
parent c7fa2fe985
commit 61f5cd478d
3 changed files with 13 additions and 7 deletions

View file

@ -1577,10 +1577,9 @@ void Player::delCounter(int counterId)
AbstractCounter *c = counters.value(counterId, 0);
if (!c)
return;
if (c->getName() == "life")
playerTarget->delCounter();
counters.remove(counterId);
c->delCounter();
counters.remove(counterId);
rearrangeCounters();
}
@ -1590,7 +1589,6 @@ void Player::clearCounters()
while (counterIterator.hasNext())
counterIterator.next().value()->delCounter();
counters.clear();
playerTarget->delCounter();
}
ArrowItem *Player::addArrow(const ServerInfo_Arrow &arrow)

View file

@ -56,6 +56,13 @@ PlayerTarget::PlayerTarget(Player *_owner, QGraphicsItem *parentItem)
fullPixmap = QPixmap();
}
PlayerTarget::~PlayerTarget()
{
// Explicit deletion is necessary in spite of parent/child relationship
// as we need this object to be alive to receive the destroyed() signal.
delete playerCounter;
}
QRectF PlayerTarget::boundingRect() const
{
return QRectF(0, 0, 160, 64);
@ -136,12 +143,12 @@ AbstractCounter *PlayerTarget::addCounter(int _counterId, const QString &_name,
playerCounter = new PlayerCounter(owner, _counterId, _name, _value, this);
playerCounter->setPos(boundingRect().width() - playerCounter->boundingRect().width(), boundingRect().height() - playerCounter->boundingRect().height());
connect(playerCounter, SIGNAL(destroyed()), this, SLOT(delCounter()));
connect(playerCounter, SIGNAL(destroyed()), this, SLOT(counterDeleted()));
return playerCounter;
}
void PlayerTarget::delCounter()
void PlayerTarget::counterDeleted()
{
playerCounter = 0;
}

View file

@ -22,12 +22,13 @@ private:
QPixmap fullPixmap;
PlayerCounter *playerCounter;
public slots:
void delCounter();
void counterDeleted();
public:
enum { Type = typePlayerTarget };
int type() const { return Type; }
PlayerTarget(Player *_player = 0, QGraphicsItem *parentItem = 0);
~PlayerTarget();
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);