当前位置 博文首页 > liuguangshibei的博客:QT学习——day6

    liuguangshibei的博客:QT学习——day6

    作者:[db:作者] 时间:2021-08-13 12:54

    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()
    {
        //编写事件处理函数体
    }
    
    
    cs
    下一篇:没有了