QT学习——day6

本文介绍了如何在QT环境中使用QTimer类创建定时器,包括定时器的创建、信号与槽的连接、不同精度的设置以及单次信号发射。通过示例展示了如何利用QTimer进行周期性更新显示当前时间,以及如何控制定时器的启动和停止,为窗口程序的动态效果和定时任务提供了实用的方法。
摘要由CSDN通过智能技术生成

QT学习——day6

QTimer定时器类的使用

在进行窗口程序的处理过程中, 经常要周期性的执行某些操作, 或者制作一些动画效果,看似比较复杂的问题使用定时器就可以完美的解决这些问题。

要使用它,只需创建一个QTimer类对象,然后调用其 start() 函数开启定时器,此后QTimer对象就会周期性的发出 timeout() 信号。

创建定时器类对象

1.在需要定时器的窗口类中添加头文件

#include<QTime>//用来调用currentTime()函数获取当前系统时间
#include"QTimer"//定时器类对象的头文件

2.将QTimer类实例化为一个对象指针,并通过this指针与当前主窗口绑定,使其自动在析构函数中回收为指针分配的空间。

 QTimer *tim=new QTimer(this);
用connect函数进行信号连接

3.调用connect函数将点击事件与计时器信号发射函数进行连接,当点击事件执行后,QTimer将以每1000ms的频率通过timeout中的start发射信号。

  connect(ui->loopbtn,&QPushButton::clicked,this,[=](){
        
       emit tim->start(1000);//1000ms=1s
    });

4.调用connect函数将计时器发射的信号与QTIme类处理函数进行连接。使用lambda表达式,在表达式中根据信号接受的频率调用QTime类中的currentTime()函数获取当前时间并格式化为QString类型进行输出。

 connect(tim,&QTimer::timeout,this,[=](){
        QTime now_t=QTime::currentTime();
        QString t_str=now_t.toString("hh:mm:ss.zzz");
        ui->curTime->setText(t_str);
    });

5.可以加个判断函数来优化一下:

  connect(ui->loopbtn,&QPushButton::clicked,this,[=](){
        if(tim->isActive())
        {
            tim->stop();
            ui->loopbtn->setText("开始");
        }
        else
        {
            emit tim->start(1000);//1000ms=1s
            ui->loopbtn->setText("关闭");
        }
    });

这样就可以控制计时器啦。

6.三种精度:

 emit tim->start(Qt::CoarseTimer);//默认精度,误差为百分之毫秒
 emit tim->start(Qt::PreciseTimer);//最高精度,误差为1毫秒
 emit tim->start(Qt::VeryCoarseTimer);//最粗糙的精度,误差在一秒左右。
单次信号发射

调用QTimer中的singleShot函数,每隔固定的时间发射一次信号,并且为单次发射。

connect(ui->oncebtn,&QPushButton::clicked,this,[=](){
        QTimer::singleShot(2000,this,[=](){
            QTime now_t=QTime::currentTime();
            QString t_str=now_t.toString("hh:mm:ss.zzz");
            ui->oncetime->setText(t_str);
        });
    });
窗口控件添加槽函数的快捷方式

在对应的控件上有右击,在列表中点击“转到槽”,弹出选择窗口,选择对应触发事件,编译器会在.cpp中自动添加一个槽成员函数,直接在该函数编写事件处理函数即可。

void Mywidget::on_movebtn_clicked()
{
    //编写事件处理函数体
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值