- 问题描述:在Qt5.3.0中,想在主界面的关闭事件中通过串口发送多条数据,如果发送的语句放在QMessageBox之后,则只有第一条数据能成功发送,如果发送语句前没有QMessageBox,则可以全部发送。
- 验证:
测试1: 使用Qt5.3.0,发送的语句放在QMessageBox之后
//关闭事件
void MainFrm::closeEvent(QCloseEvent *ev)
{
int ans = QMessageBox::question(this, "提示", "是否关闭?", QMessageBox::Ok | QMessageBox::Cancel);
if (QMessageBox::Ok == ans)
{
m_comNetTool.sendComMsg("1111#");//串口发送,只有这一条能够成功发送
m_comNetTool.sendComMsg("2222#");
m_comNetTool.sendComMsg("3333#");
ev->accept();
}
else
{
ev->ignore();
}
}
结果:只能成功发送"1111#"
测试2: 使用Qt5.3.0,发送的语句之前没有QMessageBox
//关闭事件
void MainFrm::closeEvent(QCloseEvent *ev)
{
m_comNetTool.sendComMsg("1111#");
m_comNetTool.sendComMsg("2222#");
m_comNetTool.sendComMsg("3333#");
}
结果:可以全部发送
测试3: 使用Qt5.9.0,与测试1相同的代码
//关闭事件
void MainFrm::closeEvent(QCloseEvent *ev)
{
int ans = QMessageBox::question(this, "提示", "是否关闭?", QMessageBox::Ok | QMessageBox::Cancel);
if (QMessageBox::Ok == ans)
{
m_comNetTool.sendComMsg("1111#"); //串口发送
m_comNetTool.sendComMsg("2222#");
m_comNetTool.sendComMsg("3333#");
ev->accept();
}
else
{
ev->ignore();
}
}
结果:可以全部发送
- 结论:应该是Qt5.3.0的一个BUG,暂未找到其他可能的原因。