C++ QT不使用while循环进行响应

C++ QT不使用while循环进行响应,c++,qt,while-loop,C++,Qt,While Loop,我到处寻找,没有找到这个问题的答案 我正在进行UART通信,如果按下按钮或处于“向下”位置,我希望连续读取数据。问题是我正在使用while循环来完成它。当我试图停止阅读并释放按钮时,程序冻结且没有响应。任何帮助都将不胜感激。下面是部分代码 void MainWindow::on_pushButton_3_toggled(bool checked) { while(checked) { QByteArray datas = Serial_port.readAll()

我到处寻找,没有找到这个问题的答案

我正在进行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;

}
void主窗口::on_按钮_3_已切换(布尔已选中)
{
while(选中)
{
QByteArray数据=串行_端口.readAll();
用户界面->文本编辑->设置文本((QString)数据);

qDebug()为什么需要一个循环来执行此代码?是否使用函数connect()要使您的点击事件正确无误?当您点击启动循环,并且您没有该循环的结尾时,您不需要该循环,您可以从串行端口读取所有内容,并在最终读取所有内容时将其放入QBytearray中读取下一行,然后在下一行读取,直到函数结束

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

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

您正在阻止事件循环,因此Qt无法处理事件。您可以尝试调用
QApplication::processEvents()
在循环过程中,这将使UI再次响应。

请参阅。您正在阻止事件循环,当然它将阻止Qt响应!如果您希望定期发生某些事情,您需要使用
QTimer
。我假设
QSerialPort
有一个信号,告诉您何时有数据可用,以便您喜欢你根本不需要while循环。@drescherjm是的,我有一个信号,告诉我什么时候数据可用。如果不使用while循环,我怎么能不连续地读呢?把读的内容放在一个与信号相连的插槽中。不要在那个插槽中循环。只需全部读取。将文本附加到小部件中,而不是替换它。