Итак, я написал свой собственный класс Personages
.У него есть функция kill()
, которая делает Персонажа «мертвым».
void Personages::kill()
{
this->alive = false;
}
Что я хочу сделать, это после того, как он был убит, вызвать таймер, чтобы оживить Персонажа через 1 секунду.Чтобы вызвать такую функцию:
void Personages::reincarnate()
{
this->alive = true;
}
Я делаю этот проект в Qt, и я пытался использовать QTimer, но, как я понял, его можно использовать только с QObject
(мой классне QObject
).Итак, мой вопрос: как мне этого добиться?
void Personages::kill()
{
this->alive = false;
????
}
Окей, я пытался просто сделать так, чтобы это было Q_OBJECT
.класс Personages является дочерним классом другого класса:
class Personages : public Objects
Итак, в Objects.h
я сделал следующее:
class Objects: public QObject
{
Q_OBJECT
...
}
Теперь Personages - тоже Q_OBJECT, я прав??Персонажи имеют следующие функции (.h):
void kill();
private slots:
void reincarnate();
А вот код:
void Personages::kill()
{
this->alive = false;
this->timer = new QTimer(this);
connect(this->timer, SIGNAL(timeout()), this, SLOT(reincarnate()));
this->timer->start(1000);
}
void Personages::reincarnate()
{
this->alive = true;
this->timer->stop();
delete this->timer;
}
Он компилируется, но мертвый персонаж все равно не оживает.В чем проблема?У меня есть эта ошибка: QObject :: connect: нет такого слота Objects :: reincarnate () в .. \ AndenturesOfLolo \ personages.cpp: 1074
Окей, мне не нужно делать какой-либо классбыть Q_OBJECT.Ответ Али сработал именно так, как я хотел
void Personages::kill()
{
this->alive = false;
QTimer::singleShot(5000, [=]() { reincarnate(); });
}
void Personages::reincarnate()
{
this->alive = true;
}