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

View file

@ -56,6 +56,13 @@ PlayerTarget::PlayerTarget(Player *_owner, QGraphicsItem *parentItem)
fullPixmap = QPixmap(); 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 QRectF PlayerTarget::boundingRect() const
{ {
return QRectF(0, 0, 160, 64); 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 = new PlayerCounter(owner, _counterId, _name, _value, this);
playerCounter->setPos(boundingRect().width() - playerCounter->boundingRect().width(), boundingRect().height() - playerCounter->boundingRect().height()); 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; return playerCounter;
} }
void PlayerTarget::delCounter() void PlayerTarget::counterDeleted()
{ {
playerCounter = 0; playerCounter = 0;
} }

View file

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