QT定时器

主要任务

1.掌握定时器的初始化
2.掌握两种定时器的QT写法
3.匹配按钮完成计时与停止的窗口搭建

I.QTimerEvent()函数

定时函数QTimerEvent包含了startTimer(),killTimer(),event()函数,其中常用的startTimer(),killTimer()分别为定时开始与指定定时器停止函数。
在这里插入图片描述

I.定时器1函数

一个定时器

首先在父类中定义好所需的函数与变量,方便调用。
这里我定义了重写定时器事件与两个接受不同间隔计时的函数

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    //重写定时器事件
    void timerEvent(QTimerEvent *);
    int id1;
    int id2;
private:
    Ui::Widget *ui;
};
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    //重写定时器事件
    void timerEvent(QTimerEvent *);
    int id1;
    int id2;
private:
    Ui::Widget *ui;
};

随后在widget.cpp中定义静态变量num初始化计时为1,通过ui控件联系到label标签中另其没调用一次计数加一。

void Widget::timerEvent(QTimerEvent *ev)
{
        static int num1  =1;
        ui->label->setText(QString::number(num1++));
}
void Widget::timerEvent(QTimerEvent *ev)
{
        static int num1  =1;
        ui->label->setText(QString::number(num1++));
}

最后在主函数中调用函数开始计时startTimer()。

多个定时器

当使用多个定时器时,为方便明确不同间隔的定时器,采用int类型的变量接收不同的定时器。在父类中申明两个int类型变量,分别用来接收间隔一秒与间隔2秒。

    id1 = startTimer(1000); //参数为ms开始启动定时器  1s
    id2 = startTimer(2000); //参数为ms开始启动定时器  2s
    //定时器第一种方式   直接用函数传参,starttimer开始计时,函数功能实现
    id1 = startTimer(1000); //参数为ms开始启动定时器  1s
    id2 = startTimer(2000); //参数为ms开始启动定时器  2s
    //定时器第一种方式   直接用函数传参,starttimer开始计时,函数功能实现

定时器重写函数用if判断语句,判断不同间隔定时器

 void Widget::timerEvent(QTimerEvent *ev)
{
    if(ev->timerId() == id1)
    {
        static int num1  =1;
        ui->label->setText(QString::number(num1++));
    }

    if(ev->timerId() == id2)
    {
        static int num2  =1;
        ui->label2->setText(QString::number(num2++));
    }
}
 void Widget::timerEvent(QTimerEvent *ev)
{
    if(ev->timerId() == id1)
    {
        static int num1  =1;
        ui->label->setText(QString::number(num1++));
    }

    if(ev->timerId() == id2)
    {
        static int num2  =1;
        ui->label2->setText(QString::number(num2++));
    }
}

II.定时器2函数

定时器2函数写法主要是声明一个QTimer的对象,通过对象调用函数开始停止,connect函数连接信号和槽。(这里我加入了按键,当按下计时开始计数,当按下停止时停止计时。)

//定时器的第二种方式  采用设置一个对象,通过对象调用函数开始停止,connect函数连接信号和槽
    QTimer *timer = new QTimer(this);
    //启动定时器
    //timer->start(500);
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        timer->start(500);
    });
    connect(ui->pushButton2,&QPushButton::clicked,[=](){
        timer->stop();
    });
    connect(timer,&QTimer::timeout,[=](){
        static int num3  =1;
        ui->label3->setText(QString::number(num3++));
    });
//定时器的第二种方式  采用设置一个对象,通过对象调用函数开始停止,connect函数连接信号和槽
    QTimer *timer = new QTimer(this);
    //启动定时器
    //timer->start(500);
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        timer->start(500);
    });
    connect(ui->pushButton2,&QPushButton::clicked,[=](){
        timer->stop();
    });
    connect(timer,&QTimer::timeout,[=](){
        static int num3  =1;
        ui->label3->setText(QString::number(num3++));
    });

III.效果图展示

打开窗口定时器1类型的两个label直接开始计时,间隔分别为2s与1s。
在这里插入图片描述
启动后定时器2类型的label开始计时在这里插入图片描述

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值