qt中有关定时器的两种实现方式

本文介绍了QT中两种定时器的实现方式。一种是利用QObject的startTimer接口,重写timerEvent函数,另一种是使用QTimer类结合timeout信号和槽函数。在关闭定时器时,可以通过killTimer或QTimer对象的stop方法。

关于定时器,qt中有两种实现方式:

1-基于QObject的startTimer接口,int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer),第一个参数是时间间隔(毫秒单位),该接口返回一个定时器的ID,后面关闭定时器或者定时器响应函数需要用到,记得保存该ID。

在头文件中,需要重写timerEvent虚函数,当定时器事件发生时触发。

protected:
    void timerEvent(QTimerEvent *event);

private:

    int iTimerID1,iTimerID2;//声明两个定时器ID

在源文件中:

    iTimerID1=startTimer(2000);
    iTimerID2=startTimer(3000);
void MainWindow::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==iTimerID1)
    {
        qDebug()<<"计时器1";
    }
    else if(event->timerId()==iTimerID2)
    {
        qDebug()<<"计时器2";
    }
}

在需要关闭定时器时,调用killTimer接口,传入对应的定时器ID即可:

    killTimer(iTimerID1);

2-另一种方式,是用的QTimer类,并通过给timeout信号设置槽函数完成:

在头文件中:

private:
    QTimer *timer;//声明一个QTimer类对象
private slots:
    void slottimefun();//声明一个定时信号槽函数

在源文件中:

    timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(slottimefun()));//把timeout信号和自定义槽函数连接
    timer->start(1000);//启动定时器,毫秒单位
    //使用qsrand()设置一个不同的初值。这里使用了QTime类的secsTo()函数,它表示两个时间点之间所包含的秒数,比如下面就是指从零点整到当前时间所经过的秒数
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
void MainWindow::slottimefun()
{
    int rand = qrand() % 100;// 产生100以内的正整数
    ui->progressBar->setValue(rand);//设置进度条数值
    // 设置时间为现在的系统时间
    ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值