在 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_OBJECTclass。

尝试将 Q_OBJECT 行添加到 Personages 的定义中,看看是否可行。