模板类中的QTimer

QTimer in a template class

本文关键字:QTimer      更新时间:2023-10-16

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

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

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

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

我的替代方案是在拥有状态机的类中实现计时器,这很好,但是我必须对所有使用状态机类的类都这样做。

所以我真的不确定下一步该往哪个方向走,我可以用一些技巧来解决这个问题吗?

我将添加示例代码,但由于我无法在状态机类中实现QTimer,因为我不能继承QObject,因此没有代码要显示:(

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;
};