QT5中QTimer使用时易错之处,以及正确使用方式

     实际应用中,常常会用到关于延时的功能,或者定时的功能;在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[ ][ ]是定义的一个全局数组。

以上是个人对定时器的总结,写的不太好,请见谅,有疑问的可以留言。

猜你喜欢

转载自blog.csdn.net/czy47/article/details/81004131