前言
在编写TCP/UDP调试助手时,想添加一个定时发送指定消息给到目标地址的功能,故而查看QT帮助文档并进行总结。
一、调用定时器的两种途径
1.通过基类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);//关闭目标定时器
2.通过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();//在此之前,会不断处理指定槽函数