我的QT Creator学习笔记(十六)——事件系统定时器事件与随机数

QTimerEvent用来描述一个定时器事件。队医一个QObject的子类,只需要使用Int

参考文献:《Qt Creator 快速入门》第三版 霍亚飞编著

QObject::startTimer(int interval)函数就可以开启一个定时器。输入参数是毫秒为单位的整数,表明设定的时间。返回值为一个整型值,代表这个定时器的编号。当定时器溢出(即定时时间达到时)可以在timerEvent函数中进行需要的操作。

Qt中使用qrand和qsrand两个函数实现随机数。

新建Qt Widgets项目mytimerevent继承自QtWidget,类名默认Widget。

       widget.h中添加函数声明如下

protected:
    void timerEvent(QTimerEvent *event);

添加三个私有成员变量如下

int id1,id2,id3;

然后在widget.cpp的构造函数中,起3个定时器,定时时间分别为1秒,1.5秒,2秒,代码如下。

    id1=startTimer(1000);
    id2=startTimer(1500);
    id3=startTimer(2000);

定时器事件处理函数实现如下

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==id1)//判断是哪个定时器
    {
        qDebug()<<"timer 1";
    }
    else if(event->timerId()==id2)
    {
        qDebug()<<"timer 2";
    }
    else if(event->timerId()==id3)
    {
        qDebug()<<"timer 3";
    }
}

运行效果打印如下信息

前面是实现QObject中的startTimer函数,其实编程中更多使用的是QTimer类实现一个定时器。它提供了更高层次的编程接口。下面使用 QTimer实现一个简单电子表功能。

上面工程中继续添加内容,在设计模式中添加LCD Number部件。

widget.h中添加私有槽声明如下。

private slots:
    void timerUpdate();

在widget.cpp中包含头文件

#include <QTimer>
#include <QTime>

在构造函数中启动定时器并将定时器溢出信号关联到槽上,代码如下

    QTimer* timer=new QTimer(this);//创建定时器
    connect(timer,&QTimer::timeout,this,&Widget::timerUpdate);//关联定时器的溢出信号到槽上
    timer->start(1000);//设置溢出时间为1秒,并启动定时器

实现定时器溢出信号槽函数代码如下

void Widget::timerUpdate()
{
    QTime time=QTime::currentTime();//获取当前时间
    QString text=time.toString("hh:mm");//转换为字符串
    if((time.second()%2)==0)
        text[2]=' ';//每隔一秒将":"显示为空格
    ui->lcdNumber->display(text);
}

 使用QTime::currentTime获取当前时间,使用QTime的second()函数来获取秒的值,并与2取余,为0就将‘:’显示为空格,实现一秒闪烁一下的效果。

最后运行效果如下

使用随机数函数来让LCD部件每隔一秒移动一个随机位置。

在构造函数中添加

qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

这里的意思是以从0点到当前时间的秒数,作为qsrand的参数,即作为随机数的初始值。如果不设置初值,每次运行程序会产生相同的一组随机数。

在timerUpdate函数里添加以下代码

    int rand=qrand()%300;//产生300以内的整随机数
    ui->lcdNumber->move(rand,rand);

最后说一下使用QTimer::singleShot函数开启一个只运行一次的定时器。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值