QTimer在模板类中

时间:2015-10-27 08:16:33

标签: c++ qt qtimer

我有一个模板类,在我的例子中是一个状态机类,因此我可以使用任何类类型构造它,这样它就可以使用带有指向成员函数的指针的函数表来调用成员函数(种类)像回电一样。)

它通过在表中查找事件(状态和事件匹配)然后调用指向相应函数的指针来处理事件。

这一切都有效。我接下来要做的是添加一个计时器,以便在计时器到期时调用processEvent()函数,并使用事件代码" TIMER_EXPIRED"。

对我来说,问题是在Qt模板类中似乎不支持插槽/信号。所以,我可以添加一个QTimer,但我无法连接或定义/发出插槽/信号。

我的另一种方法是在拥有状态机的类中实现计时器,这很好,但是我必须为使用状态机类的所有类执行此操作。

所以我不确定接下来会走哪条路,是否有一些可以用来解决这个问题的诡计?

我会添加示例代码,但由于我无法在状态机类中实现QTimer,因为我无法继承QObject,所以还没有代码可以显示:(

1 个答案:

答案 0 :(得分:3)

Lambda可以这样使用:

#pragma once

#include <QDebug>
#include <QTimer>

template< class T > class MyClass
{
public:
    MyClass()
    {
        _timer.setInterval(1000);
        // connecting the signal to the lambda
        // that will call the desired function:
        QObject::connect(&_timer, &QTimer::timeout,
                &_timer, [&](){
            theFunctionThatNeedToBeRunOnTimer();
        });
        _timer.start();
    }

    void theFunctionThatNeedToBeRunOnTimer()
    {
        qDebug() << "Timer ticked!";
    }

private:
    QTimer _timer;
};