在 QObject 之外使用 QTimer
Use QTimer outside QObject
所以,我写了我自己的 class Personages
。它有一个函数 kill()
,使 Personage 成为 "dead"。
void Personages::kill()
{
this->alive = false;
}
我想做的是在它被杀死后,调用一个定时器让Personage 在1 秒内再次存活。调用这样的函数:
void Personages::reincarnate()
{
this->alive = true;
}
我在 Qt 中创建了这个项目,我尝试使用 QTimer,但是据我所知,它只能与 QObject
一起使用(我的 class 不是 QObject
).所以我的问题是我怎样才能做到这一点?
void Personages::kill()
{
this->alive = false;
????
}
好吧,我试着让它成为 Q_OBJECT
。 class 人物为child-class 其他class:
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: 在 ..\AndenturesOfLolo\personages.cpp:1074
中没有这样的插槽 Objects::reincarnate()
好吧,我不需要做任何 class 就可以成为 Q_OBJECT。阿里的回答完全符合我的要求
void Personages::kill()
{
this->alive = false;
QTimer::singleShot(5000, [=]() { reincarnate(); });
}
void Personages::reincarnate()
{
this->alive = true;
}
这有帮助吗?
QTimer::singleShot(2000, [=]() { foo(); });
Now Personages is Q_OBJECT too, am I right?
不,Personages
不从 Objects
继承 Q_OBJECT
,但也需要 Q_OBJECT
才能识别插槽 reincarnate
。使 Personages
的超级 class 成为 Q_OBJECT
不会使 Personages
成为 Q_OBJECT
class - 如果是这样,那么您将永远不必声明一个 QObject
派生的 class 作为 Q_OBJECT
,同样地,你永远无法制作一个 没有的 QObject
subclass 一个Q_OBJECT
class。
尝试将 Q_OBJECT
行添加到 Personages
的定义中,看看是否可行。
所以,我写了我自己的 class Personages
。它有一个函数 kill()
,使 Personage 成为 "dead"。
void Personages::kill()
{
this->alive = false;
}
我想做的是在它被杀死后,调用一个定时器让Personage 在1 秒内再次存活。调用这样的函数:
void Personages::reincarnate()
{
this->alive = true;
}
我在 Qt 中创建了这个项目,我尝试使用 QTimer,但是据我所知,它只能与 QObject
一起使用(我的 class 不是 QObject
).所以我的问题是我怎样才能做到这一点?
void Personages::kill()
{
this->alive = false;
????
}
好吧,我试着让它成为 Q_OBJECT
。 class 人物为child-class 其他class:
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: 在 ..\AndenturesOfLolo\personages.cpp:1074
中没有这样的插槽 Objects::reincarnate()好吧,我不需要做任何 class 就可以成为 Q_OBJECT。阿里的回答完全符合我的要求
void Personages::kill()
{
this->alive = false;
QTimer::singleShot(5000, [=]() { reincarnate(); });
}
void Personages::reincarnate()
{
this->alive = true;
}
这有帮助吗?
QTimer::singleShot(2000, [=]() { foo(); });
Now Personages is Q_OBJECT too, am I right?
不,Personages
不从 Objects
继承 Q_OBJECT
,但也需要 Q_OBJECT
才能识别插槽 reincarnate
。使 Personages
的超级 class 成为 Q_OBJECT
不会使 Personages
成为 Q_OBJECT
class - 如果是这样,那么您将永远不必声明一个 QObject
派生的 class 作为 Q_OBJECT
,同样地,你永远无法制作一个 没有的 QObject
subclass 一个Q_OBJECT
class。
尝试将 Q_OBJECT
行添加到 Personages
的定义中,看看是否可行。