QT-定时器使用

admin2024-04-03  0

前言

在编写TCP/UDP调试助手时,想添加一个定时发送指定消息给到目标地址的功能,故而查看QT帮助文档并进行总结。

一、调用定时器的两种途径

        通过基类object自带的定时器实现

                *1*重定义定时器的事件处理函数

//定义函数前,在该类的公共变量中声明该类
public:
    void timerEvent(QTimerEvent *event) override;

//然后重新定义该函数功能
void MainWindow::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == time_id){ //QTimerEvent类中包含timerId(),用于区分不同定时器
        static int i;
        qDebug()<<"时间到!"<<i++;
    }

}

                 *2*开启定时器

int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)
例:time_id = startTimer(700);//单位为ms,返回值为创建定时器的id序号,用于区分其他定时器
                            //在执行killTimer(time_id)之前,定时器每到达指定时间,会自动执行timerEvent函数

                 *3*关闭定时器

void QObject::killTimer(int id)
例子:killTimer(time_id);//关闭目标定时器

        通过Timer类实现

                *1*创建一个Timer对象

time = new QTimer(this);

                 *2*将对象的超时信号与指定函数进行绑定

connect(timer , &QTimer::timeout , this , &MainWindow::time_out);
//当定时器timer超时时,自动发送timeout信号给予当前类,当前类接收到信号后执行指定函数time_out(信号与槽机制)

                *3*声明并定义处理函数

//先在该类的私有槽内声明处理函数
private slots:
    void time_out();


//然后定义处理函数
void MainWindow::time_out()
{
    static int i;
    qDebug()<<"时间到!"<<i++;
}

                *4* 设置超时时间并开始

    time->setInterval(700);//单位为ms,默认值为0
    time->start();//开启定时器

                *5*关闭定时器

time->stop();//在此之前,会不断处理指定槽函数
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!