【发布时间】:2017-05-28 01:26:17
【问题描述】:
我四处寻找,但没有找到这个问题的答案。
我正在进行 UART 通信,如果我按下按钮或处于“向下”位置,我想连续读取数据。问题是我正在使用一个while循环来做到这一点。当我尝试停止阅读并释放按钮时,程序冻结并且没有响应。任何帮助将不胜感激。部分代码如下。
void MainWindow::on_pushButton_3_toggled(bool checked)
{
while(checked)
{
QByteArray datas = Serial_port.readAll();
ui->textEdit->setText((QString)datas);
qDebug()<<"Im here";
msleep(100);
qDebug()<<datas;
qDebug()<<checked;
}
qDebug()<<checked;
}
【问题讨论】:
-
你阻塞了事件循环,当然它会阻塞 Qt 响应!如果您希望某事定期发生,您需要使用
QTimer。 -
我假设
QSerialPort有一个信号可以告诉您数据何时可用,因此您可能根本不需要 while 循环。 -
@drescherjm 是的,我有信号告诉我数据何时可用。如果不使用 while 循环并继续阅读,我怎么能做到这一点?
-
将读取放入连接到信号的插槽中。不要在那个插槽中循环。只需阅读全部。将文本附加到您的小部件而不是替换它。
标签: c++ qt while-loop