QT学习之定时器

一、定时器

第一种方式:

1 利用事件 void timerEvent ( QTimerEvent * ev)
2 启动定时器 startTimer( 1000) 毫秒单位
3 timerEvent 的返回值是定时器的唯一标示 可以和ev->timerid 做比较

第二种方式:

1 利用定时器类 QTimer
2 创建定时器对象 QTimer * timer = new QTimer(this)
3 启动定时器 timer->start(毫秒)
4 每隔一定毫秒,发送信号 timeout ,进行监听
5 暂停 timer->stop
.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include 

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    //重写定时器的事件   虚函数 子类重写父类的虚函数
    virtual void timerEvent(QTimerEvent *);

    int id1; //定时器1的唯一标示
    int id2; //定时器2的唯一标示
 
private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include  //定时器类
#include 
#include 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

	//定时器第一种方式
    //启动定时器   每隔1s调用一下timerEvent函数
    id1 = startTimer(1000); //参数1  间隔  单位 毫秒

    id2 = startTimer(2000);


    //定时器第二种方式
    QTimer * timer = new QTimer(this);
    //启动定时器
    timer->start(500);

    connect(timer,&QTimer::timeout,[=](){
        static int num = 1;

        //label4 每隔0.5秒+1
        ui->label_4->setText(QString::number(num++));
    });


    //点击停止或开始按钮 实现停止定时器或者启动定时器
    connect(ui->btn,&QPushButton::clicked,[=](){
        timer->stop();
        //timer->start(500);
    });

}


void Widget::timerEvent(QTimerEvent * ev)
{
    if(ev->timerId() == id1)
    {
        static int num = 1;

        //label2 每隔1秒+1
        ui->label_2->setText(  QString::number(num++));
    }

    if(ev->timerId() == id2)
    {
	    //label3  每隔2秒 +1
	    static int num2 = 1;
	    ui->label_3->setText(  QString::number(num2++));
    }

}

Widget::~Widget()
{
    delete ui;
}

二、显示效果

QT学习之定时器_第1张图片

你可能感兴趣的:(QT,qt,学习,ui)