C++实践之Qt学习(九):定时器

定时器的使用场景很多,例如2D绘图类的游戏开发中,可以用来进行界面的重绘刷新、人物动作帧切换等,还可以实现项目中时间的实时更新。

Qt中的定时器有两种实现方式:1)QTimer类 2)QObject中的定时器

由于QTimer类使用时不能支持多个定时器同时使用,因此一般使用第二种方式

QTimer类实现定时器

第一步

定时器对象在超时后会发出timeout()信号,需要建立定时器类对象以及超时信号和对应槽函数的连接

添加槽函数声明

private slots:
    void onTimeOut();

添加槽函数定义

void MyFirstWnd::onTimeOut()
{
    qDebug() << "QTimer定时器触发了";
}

第二步

定义一个定时类对象:

private:
    QTimer *m_pCountTimer;

第三步

创建定时器对象并建立信号和槽连接:

m_pCountTimer = new QTimer(this);
connect(m_pCountTimer, SIGNAL(timeout()), this, SLOT(onTimeOut()));

第四步

启动定时器:

m_pCountTimer->start(1000);

QObject中的定时器

QObject中的定时器的使用涉及三个函数:

startTimer(int interval):启动定时器,函数参数为毫秒值的时间间隔,开启成功后返回该定时器的ID,并每隔间隔时间后会重入定时事件函数。

killTimer(int id):传入指定的定时器ID来结束定时器

timerEvent(QTimerEvent *event):定时器启动后,每次超时都会进入该事件函数,因此需要重写这个函数,并可以通过参数event中的timerId来确定是哪个定时器,再去执行相应的操作。

第一步

定义相关的定时器ID,以及声明定时器事件函数:

public:
    virtual void timerEvent(QTimerEvent *event);
private:
    int m_nRepaintTimer; // 重绘定时器
    int m_nWalkTimer; // 移动帧切换定时器

第二步

完成定时器事件函数的定义:

void GameWnd::timerEvent(QTimerEvent *event)
{
    int timerId = event->timerId();
    if (timerId == m_nRepaintTimer)
    {
        qDebug() << "m_nRepaintTimer定时器触发了";
    }
    else if (timerId == m_nWalkTimer)
    {
        qDebug() << "m_nWalkTimer定时器触发了";
    }
}

第三步

启动定时器:

    m_nRepaintTimer = startTimer(1500);
    m_nWalkTimer = startTimer(1000);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值