Qt中定时器的使用有3种方法,
- 使用QObject类提供的定时器
- 使用QTimer类提供的定时器
-
静态的singleShot ()函数创建单触发定时器
其中单次触发功能不推荐使用,就不做介绍了
方法一:使用QTimer定时器类(这种方法普遍使用)
示例代码:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
tim = new QTimer();
tim->setInterval(1000);
connect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));
tim->start();
}
void MainWindow::onTimeOut()
{
static int value = 0;
ui->progressBar->setValue(value++);
if(value > 100)
tim->stop();
}
QTimer类的简单介绍可以参考:QTimer类详细说明 - ADTL - 博客园 ()
方法二:QObject中的定时器的使用,需要用到三个函数
1、 int QObject::startTimer ( int interval ) ;
这个是开启一个定时器的函数,他的参数interval是毫秒级别。当开启成功后会返回这个定时器的ID, 并且每隔interval 时间后会进入timerEvent 函数。直到定时器被杀死。
2、 void QObject::timerEvent ( QTimerEvent * event );
当定时器超时后,会进入该事件timerEvent函数,需要重写timerEvent函数,在函数中通过判断event->timerId()来确定定时器,然后执行某个定时器的超时函数。
3、 void QObject::killTimer ( int id );
通过从startTimer返回的ID传入killTimer 函数中杀死定时器,结束定时器进入超时处理。
代码:kilTimer杀死定时器后,必须再重新创建定时器才能启用定时器。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
timerid1 = startTimer(1000);
timerid2 = startTimer(2000);
}
void MainWindow::timerEvent(QTimerEvent *e)
{
if(e->timerId()==timerid1)
{
qDebug("timer1");
}
else if(e->timerId()==timerid2)
{
qDebug("timer2");
}
}
void MainWindow::on_pushButton_clicked()
{
killTimer(timerid1);
timerid1 = 0;
}
void MainWindow::on_pushButton_2_clicked()
{
timerid1 = startTimer(2000);
}
参考:QT定时器事件startTimer_qt starttimer-****博客