模板类中的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;
};
相关文章:
- 如何从其他类n个Qt C++调用QTimer?
- 如何完全停止QTimer
- QTimer 超时不会在单元测试中触发
- 使用 QTimer、QThread 和进度条
- 在C++中使用std或boost库的Qtimer等价物是什么
- QTimer::singleShot 仅在间隔为 0 时调用 lambda
- 如何在QtConcurrent::run中启动QTimer或为什么QVector<QTimer*>不起作用
- 何时使用多个函数调用和 QTimer 调用析构函数?
- 使用 std::bind 将 QTimer::singleShot 传递给 std::async
- QTimer isActive 返回 true,但 remainingTime 返回 -1
- 让 QtConcurrent 中的 QTimer 正常工作
- QTimer timeout()方法不再在代码重组后启动
- QTimer 在传递变量时不会启动
- 在插槽中停止QTIMER
- 使用 QTimer 对包含 5 张图像的幻灯片进行计时
- 另一个应用程序用 c++ 在 Windows 上的线程中破坏 QTimer
- QTimer 线程的方法 'isActive()' 是安全的吗?
- 识别哪种QTIMER的任何方法
- QTimer超时信号在每个超时事件中多次发射
- 删除如何适用于QTimer