单次定时器的坑
setSingleShot 函数设置qtimer 为单次触发。
这种情况,实际测试中如果不将定时器 kill 。还是会有多个定时器存在。
m_pTimer = new QTimer(this);
m_pTimer->setSingleShot(true);
m_pTimer->start(20);
connect(m_pTimer, &QTimer::timeout, this, = {
QByteArray dataHex = Serial->serial->readAll().toHex();
QString data;
int s = dataHex.size();
for (int i = 0; i < dataHex.size(); i++)
{
data += dataHex.at(i);
if (i == 19)
{
if (dataHex.at(i) == ‘0’)
{
ui.textBrowser_info->insertPlainText(“握手成功!\n”);
}
else
{
ui.textBrowser_info->insertPlainText(“握手失败!\n”);
}
}
}
ui.textBrowser_info->insertPlainText(data);
ui.textBrowser_info->insertPlainText("\n");
m_pTimer->stop();//此位置设断点 定时器会结束结束
dataHex.clear();
});
使用 singleShot 静态函数 没有这个问题
QTimer::singleShot(20, this, = {
QByteArray dataHex = Serial->serial->readAll().toHex();
QString data;
int s = dataHex.size();
for (int i = 0; i < dataHex.size(); i++)
{
data += dataHex.at(i);
if (i == 19)
{
if (dataHex.at(i) == ‘0’)
{
ui.textBrowser_info->insertPlainText(“握手成功!\n”);
}
else
{
ui.textBrowser_info->insertPlainText(“握手失败!\n”);
}
}
}
ui.textBrowser_info->insertPlainText(data);
ui.textBrowser_info->insertPlainText("\n");
dataHex.clear();
});
经过测试,单次定时没有多次停止的问题。特此记录