------------------------------------------------------------
author: hjjdebug
date: 2024年 08月 25日 星期日 09:58:23 CST
description: qtimer 测试研究
------------------------------------------------------------
测试代码:
hjj@hjj-7090:~/test/qtimer$ cat main.cpp
#include <QApplication>
#include "mytimer.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
MyTimer *timer= new MyTimer();
timer->start();
return app.exec();
}
hjj@hjj-7090:~/test/qtimer$ cat mytimer.h
#ifndef _MY_TIMER_H
#define _MY_TIMER_H
#include <QTimer>
class MyTimer : public QObject
{
Q_OBJECT
public:
MyTimer();
~MyTimer();
void start();
public slots:
void slotTimerout();
private:
QTimer * m_timer=NULL;
};
#endif
hjj@hjj-7090:~/test/qtimer$ cat mytimer.cpp
#include "mytimer.h"
#include <stdio.h>
MyTimer::MyTimer()
{
m_timer = new QTimer();
m_timer->setSingleShot(true); //默认singleshot 为假,是周期性timer
connect(m_timer,SIGNAL(timeout()),this,SLOT(slotTimerout()));
}
MyTimer::~MyTimer()
{
if(m_timer)
{
delete m_timer;
m_timer = NULL;
}
}
void MyTimer::slotTimerout()
{
printf("receiver timer signal!\n");
}
void MyTimer::start()
{ //允许设0值, 但不允许设负值
m_timer->start(0);
}
执行结果:
./qtimer
receiver timer signal!
收获:
1. 花半小时,全部以己之力书写的代码,参考qtimer.h头文件.
2. qtimer 默认是周期性timer, 时间到后会重新开始计时
若想使其成为一次性的, 可调用setSingleShot(true) 函数
3. start(int msec)
当设置为0ms 时,会立即触发timeout, 不允许设负值(有警告输出),