• 定时器事件和随机数


    QTimerEvent(定时器事件)

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

    timerId()获取定时器编号

    使用事件实现定时:

    添加成员函数和变量

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

    构造函数:

    1. resize(800,800);
    2. ab1=new QLabel(this);
    3. ab2=new QLabel(this);
    4. ab1->setFrameShape(QFrame::Box);
    5. ab2->setFrameShape(QFrame::Box);
    6. ab1->resize(200,50);
    7. ab2->resize(200,50);
    8. ab2->move(300,0);
    9. time1=startTimer(1000);//定时器1=1000毫秒
    10. time2=startTimer(500);//定时器2=500毫秒

    定时器事件的实现:

    1. void Widget::timerEvent(QTimerEvent *event)//定时器事件
    2. {
    3. if(event->timerId()==time1)//time1时的情况
    4. {
    5. ab1->setText(QString::number(date1++));
    6. }
    7. if(event->timerId()==time2)//time2时的情况
    8. {
    9. ab2->setText(QString::number(date2++));
    10. }
    11. }

    效果:

    QTimer(定时器类)

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

    构造函数 :

     常用函数:

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

    直接使用的函数:

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

    头文件添加:

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

    构造函数:

    1. resize(800,800);
    2. ab1=new QLabel(this);
    3. ab2=new QLabel(this);
    4. ab1->setFrameShape(QFrame::Box);
    5. ab2->setFrameShape(QFrame::Box);
    6. ab1->resize(200,50);
    7. ab2->resize(200,50);
    8. ab2->move(300,0);
    9. /*
    10. QTimer *timer1=new QTimer(this);//定时器1
    11. QTimer *timer2=new QTimer(this);//定时器2
    12. timer1->start(1000);
    13. timer2->start(500);
    14. connect(timer1,&QTimer::timeout,[=]()
    15. {
    16. ab1->setText(QString::number(date1++));
    17. });
    18. connect(timer2,&QTimer::timeout,[=]()
    19. {
    20. ab2->setText(QString::number(date2++));
    21. });

    效果:

     QTime::singleShot的使用

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

    经过5000毫秒,关闭页面 

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

    获取当前的时间:

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

     随机数:

    • qsrand()  设置随机数的初值
    • qrand()     产生随机数
    1. resize(800,800);
    2. QLabel *label=new QLabel(this);
    3. label->resize(200,50);
    4. QTimer *timer=new QTimer(this);
    5. qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//设置随机种子
    6. connect(timer,&QTimer::timeout,[=]()
    7. {
    8. int rand=qrand()%300;
    9. label->setText(QString::number(rand));
    10. });
    11. timer->start(1000);//开启定时器

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

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

    QLabel   边框为Box    三个QPushButton

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

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

     构造函数中的代码:

    1. resize(800,800);//设置窗口大小
    2. timer=new QTimer(this);//创建一个定时器
    3. ui->label->setText(QString::number(number));
    4. connect(ui->pushButton,&QPushButton::clicked,[=]()//开始按钮
    5. {
    6. timer->start(1000);//启动计时器
    7. });
    8. connect(ui->pushButton_2,&QPushButton::clicked,[=]()//暂停按钮
    9. {
    10. timer->stop();//停止计时器
    11. });
    12. connect(ui->pushButton_3,&QPushButton::clicked,[=]()//归零按钮
    13. {
    14. number=0;//数据归零
    15. ui->label->setText(QString::number(number));
    16. });
    17. connect(timer,&QTimer::timeout,[=]()//mutable
    18. {
    19. ui->label->setText(QString::number(++number));//显示数据
    20. });

  • 相关阅读:
    Safe Head机制技术实践分析
    家用威联通NAS的硬盘方案
    Android——数据存储(一)(二十一)
    js基础笔记学习256navigator
    M1通讯层的校验-尾块
    Jedis连接池:JedisPool及连接池工具类搭建
    Java学习之继承的本质(重要)
    CSS笔记(黑马程序员pink老师前端)CSS初始化
    30个 Java 集合面试必备的问题
    linux usb驱动移植(1)
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/127823144