实际应用中,常常会用到关于延时的功能,或者定时的功能;在C++或者C中可以自定义函数。也可以使用自带的Sleep(number)函数,其中number表示需要延时多少ms;
在这里将会向大家介绍一下关于QT5中的定时器类:QTimer 定时器类QTimer提供当定时器触发时发射一个信号的定时器,常用的编程格式如下:
QTimer *timer = new QTimer(this);
timer->start(2000); //该语句不是只运行一次,而是一直运行下去,所以需要一个判断语句来结束
connect(timer, SIGNAL(timeout()), this, SLOT(myTimeout1()));
第一句是在当前this指针指向的界面上定义一个定时器,即:timer指针的父窗口是this指针指向的窗口界面。
第二句的含义是指当timer定时器开始定时,定时的时间长度为2000ms,这句程序还等价于下面这两句程序
timer->setInterval(2000);
timer->start();
它们的作用是一样的。
第三句的意思很明显,就是指当2000ms结束后,会发射一个函数为timeout()信号的信号,该函数经查询作用如下:
void QTimer::timeout()
This signal is emitted when the timer times out.
该timeout()函数会与槽函数timerDone()联系起来,并运行槽函数。
下面重点来了,重要的事情说三遍!重要的事情说三遍!重要的事情说三遍!
注意第二行代码:
timer->start( 2000 ); // 2秒触发定时器
该行代码是每隔2000ms后就会重启定时器,重新调用一次槽函数,除非调用stop()将定时器关掉。例如这样
QTimer *timer = new QTimer();
timer->setInterval(100);//每5秒时间用尽之后运行一次connect()函数;
timer->start(); //该语句不是只运行一次,而是一直运行下去,所以需要一个判断语句来结束
connect(timer, SIGNAL(timeout()), this, SLOT(myTimeout1()));
if(number>118)
{
number=0;
timer->stop();
}
这里定义了一个全局变量number,此处目的是让定时器运行118次,在第119次以后不再使用定时功能。
void :myTimeout1()
{
number++;
QString str1;
//将变量设置为全局变量、数组
if(number<110)
{
str1=QString("%1").arg(data1[number][0]);
ui->tableWidget_3->setItem(0,0,new QTableWidgetItem(str1));
}
}
data1[ ][ ]是定义的一个全局数组。
以上是个人对定时器的总结,写的不太好,请见谅,有疑问的可以留言。