1.周期发送数据功能
周期发送功能:选中周期发送开关,软件以下图 2 所示的周期,将数据周期循环发送。

2. 功能实现
step1:需创建一个定时器来实现,mainwindow.h 函数中定义定时器对象
//周期发送定时器,和多行的循环发送共用
QTimer *PriecSendTimer;
step2:在 mainwindow.cpp 的构造函数中创建定时器,并关联超时函数
//创建周期发送、时间显示、延时接收定时器,并初始化
PriecSendTimer = new QTimer;
PriecSendTimer->setInterval(1000);//默认周期1000ms
//定时器槽关联,关联至发送按钮槽函数,即定时到来时,自动发送数据
connect(PriecSendTimer,&QTimer::timeout,this,[=](){on_pushButtonSend_clicked();});
如上代码所示,将定时器超时函数关联到了“发送”按钮槽函数,相当于定时到达时,按了一下“发送”按钮,而按发送按钮会完成串口数据的发送。因此,我们只需要在选中“周期发送”的时候,重新设置发送周期和启动定时器即可。
step3:选中“周期发送”槽函数,选中 stateChanged(int)

step4:“周期发送”槽函数代码编辑
/***********************************************************
*周期发送
* 1.未选中状态下,关闭周期发送定时器,使能周期输入文本框
* 2.选中状态,获取周期,并启动周期发送定时器,失能周期输入文本框
***********************************************************/
void MainWindow::on_checkBoxPeriodicSend_stateChanged(int arg1)
{
if(arg1 == false)//未选中
{
PriecSendTimer->stop();//关闭定时器
ui->lineEditTime->setEnabled(true);//使能周期输入文本框
}
else //选中,开始周期发送
{
PriecSendTimer->start(ui->lineEditTime->text().toInt());//启动周期发送定时器
ui->lineEditTime->setEnabled(false);//失能周期输入文本框
}
}
3.小结
完成周期发送功能!