因此,我编写了自己的课程Personages
。它具有一个函数kill()
,使Personage成为“死亡”。
void Personages::kill()
{
this->alive = false;
}
我想做的是杀死它后,调用一个计时器使Personage在1秒内再次存活。要调用这样的函数:
void Personages::reincarnate()
{
this->alive = true;
}
我在Qt中创建了这个项目,并且尝试使用QTimer,但是据我了解,它只能与QObject
一起使用(我的课程不是QObject
)。所以我的问题是如何实现呢?
void Personages::kill()
{
this->alive = false;
????
}
Okey,我尝试只是使其成为Q_OBJECT
。人员是其他类别的子类别:
class Personages : public Objects
因此,在Objects.h
中,我完成了以下操作:
class Objects: public QObject
{
Q_OBJECT
...
}
现在人物也是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:.. \ AndenturesOfLolo \ personages.cpp:1074
中没有此类插槽Objects :: reincarnate()Okey,我不需要做任何课程就可以成为Q_OBJECT。阿里的答案完全符合我的要求
void Personages::kill()
{
this->alive = false;
QTimer::singleShot(5000, [=]() { reincarnate(); });
}
void Personages::reincarnate()
{
this->alive = true;
}
答案 0 :(得分:0)
有帮助吗?
QTimer::singleShot(2000, [=]() { foo(); });
答案 1 :(得分:0)
现在人物也是Q_OBJECT,对吗?
否,Personages
不会从Q_OBJECT
继承Objects
,但也必须是Q_OBJECT
,才能识别插槽reincarnate
。使Personages
的超类成为Q_OBJECT
并不会使Personages
成为Q_OBJECT
的类-如果这样做,则您将不必声明源自QObject
的类类作为Q_OBJECT
,类似地,您将永远无法创建不是 QObject
类的Q_OBJECT
子类。
尝试将Q_OBJECT
行添加到Personages
的定义中,看看是否行得通。