QT 不使用 while 循环进行响应

QT does not respond using a while loop

本文关键字:响应 循环 while QT      更新时间:2023-10-16

我四处寻找,但没有运气,得到了这个问题的答案。

我正在进行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无法处理事件。您可以尝试在循环期间调用QApplication::processEvents(),这应该会使 UI 再次响应。

为什么需要一个循环来执行这段代码? 您是否使用函数 connect() 来使您的点击事件正确? 你点击你开始你的循环,你没有这个循环的结束,你不需要这个循环,你从串行端口读取全部并将其放入 QBytearray 当它最终读取所有函数时读取下一行和下一行直到函数结束!

但是,如果您需要继续使用循环,请尝试在UI中选中一个复选框,以获取true或false,并在循环中放入if以停止循环

if(ui->cb->isChecked()) 
   checked = true; 
else 
   checked=false;