定时器事件和随机数

QTimerEvent(定时器事件)

计时器事件定期发送到已启动一个或多个计时器的对象。每个计时器都有一个唯一的标识符。计时器以Object::startTimer启动定时器。

timerId()获取定时器编号

使用事件实现定时:

添加成员函数和变量

    void timerEvent(QTimerEvent *event);//定时器事件
    int time1;//定时器1
    int time2;//定时器2
    QLabel *ab1=nullptr;//显示数据1
    QLabel *ab2=nullptr;//显示数据2
    int date1=0;//数据1
    int date2=0;//数据2

构造函数:

    resize(800,800);
    ab1=new QLabel(this);
    ab2=new QLabel(this);
    ab1->setFrameShape(QFrame::Box);
    ab2->setFrameShape(QFrame::Box);
    ab1->resize(200,50);
    ab2->resize(200,50);
    ab2->move(300,0);

    time1=startTimer(1000);//定时器1=1000毫秒
    time2=startTimer(500);//定时器2=500毫秒

定时器事件的实现:

void Widget::timerEvent(QTimerEvent *event)//定时器事件
{
    if(event->timerId()==time1)//time1时的情况
    {
        ab1->setText(QString::number(date1++));
    }
    if(event->timerId()==time2)//time2时的情况
    {
        ab2->setText(QString::number(date2++));
    }
}

效果:

QTimer(定时器类)

QTimer 类为计时器提供了一个高级编程接口。要使用它,请创建一个 QTimer,将其timeout() 信号连接到相应的插槽,然后调用start()。从那时起,它将以恒定的间隔发出timeout() 信号。 

构造函数 :

 常用函数:

start()开启
start(mesc)开启,如果计时器已经在运行,它将停止并重新启动
stop()暂停
timeid()返回运行的定时器的编号
setSingleShot()保存计时器是否为单次计时器

直接使用的函数:

QTime::singleShot(int msec,const Object*recriver,constchar* member); 

头文件添加:

    QLabel *ab1=nullptr;//显示数据1
    QLabel *ab2=nullptr;//显示数据2
    int date1=0;//数据1
    int date2=0;//数据2

构造函数:

    resize(800,800);
    ab1=new QLabel(this);
    ab2=new QLabel(this);
    ab1->setFrameShape(QFrame::Box);
    ab2->setFrameShape(QFrame::Box);
    ab1->resize(200,50);
    ab2->resize(200,50);
    ab2->move(300,0);
    /*
    QTimer *timer1=new QTimer(this);//定时器1
    QTimer *timer2=new QTimer(this);//定时器2
    timer1->start(1000);
    timer2->start(500);
    connect(timer1,&QTimer::timeout,[=]()
    {
        ab1->setText(QString::number(date1++));
    });
    connect(timer2,&QTimer::timeout,[=]()
    {
        ab2->setText(QString::number(date2++));
    });

效果:

 QTime::singleShot的使用

该函数有多种重载,这里只列举一种

经过5000毫秒,关闭页面 

QTimer::singleShot(5000,this,&Widget::close);

获取当前的时间:

    resize(800,800);
    QLabel *label=new QLabel(this);
    label->resize(200,50);
    QTimer *timer=new QTimer(this);
    connect(timer,&QTimer::timeout,[=]()
    {
        QDateTime datetime;
        datetime=QDateTime::currentDateTime();//获取当前时间
        QString s=datetime.toString("yyyy:MM:dd:hh:mm:ss");
        label->setText(s);
    });
    timer->start(1000);//开启定时器

 随机数:

  • qsrand()  设置随机数的初值
  • qrand()     产生随机数
    resize(800,800);
    QLabel *label=new QLabel(this);
    label->resize(200,50);

    QTimer *timer=new QTimer(this);
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//设置随机种子
    connect(timer,&QTimer::timeout,[=]()
    {
        int rand=qrand()%300;
        label->setText(QString::number(rand));
    });
    timer->start(1000);//开启定时器

制作一个计时器,可以开启,归零,暂停

在ui->界面中添加以下控件

QLabel   边框为Box    三个QPushButton

在.h文件中添加成员变量

    int number=0;//记录数据
    QTimer *timer=nullprt;//计时器

 构造函数中的代码:

    resize(800,800);//设置窗口大小
    timer=new QTimer(this);//创建一个定时器
    ui->label->setText(QString::number(number));
    connect(ui->pushButton,&QPushButton::clicked,[=]()//开始按钮
    {
        timer->start(1000);//启动计时器
    });
    connect(ui->pushButton_2,&QPushButton::clicked,[=]()//暂停按钮
    {
        timer->stop();//停止计时器
    });
    connect(ui->pushButton_3,&QPushButton::clicked,[=]()//归零按钮
    {
        number=0;//数据归零
        ui->label->setText(QString::number(number));
    });
    connect(timer,&QTimer::timeout,[=]()//mutable
    {
        ui->label->setText(QString::number(++number));//显示数据
    });

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值