Qt QTimer的使用及示例

在QT5中,我们有一个专门的计时器类,QTimer,我们可以利用它完成一些关于定时的操作,实例如下:

#include <QTimer>

QTimer* timer = new QTimer();
timer->start(value);           //以毫秒为单位
QObject::connect(timer,&QTimer::timeout,receiver,&slot);    //时间结束,发送timeout信号

void slot()
{
       timer->stop();                 //停止计时器
       //do something  
}

在我们定时时间结束的时候,我们需要手动停止timer,不然他会不断发送出timeout这个信号,同时,我们需要注意,在做连接函数之前,我们需要存在这个timer的实例,不然会导致程序崩溃,当然我们也可以不需要实例化timer,而是使用QTimer的静态方法,直接起动定时,一下是QT文档中的一个例子:

#include <QApplication>
#include <QTimer>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTimer::singleShot(600000, &app, SLOT(quit()));    //使用静态方法,在600秒之后退出程序
    ...
    return app.exec();
}

我们可以在一个程序之中使用多个timer,每一个timer都是有着自己独自的timerId,和window进程的pid类似,我们可以利用timerEvent来处理多个timer:

void timerEvent(QTimerEvent* event)
{
        if(event->timerId() == timerId)            //使用if来判断是那个timer发出的信号        
        {
                // do something 
        }  
}

参考:QTimer计时器

程序设计的思路:

  1. 先设定定时周期
  2. 绑定timeout()信号到自定义槽函数
  3. 调用start函数启动定时器

下面是widget窗口类中的定义:

class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
 
private:
    Ui::Widget *ui;
    QTimer *tim;
public slots:
    void onTimeOut();
};

在这里定义了一个QTimer,还定义了槽函数onTimeOut(),作为timeout信号所对应的槽函数。

窗口类的构造函数中的代码如下:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    tim = new QTimer();
    tim->setInterval(100);
    connect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));
    //connect(tim, &QTimer::timeout, this, &Widget::onTimeOut);
 
    tim->start();
}

在本例中先是设置定时器的定时周期为1s,后面又进行了信号与槽的绑定,最后是启动定时器。

定时器处理函数中的代码如下:

void Widget::onTimeOut()
{
    static int value = 0;
    ui->progressBar->setValue(value++);
 
    if(value > 100)
        tim->stop();
}

参考:Qt之QTimer(定时器)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值