程序因 While 循环而崩溃

Program crashes because of a While loop

本文关键字:崩溃 循环 While 程序      更新时间:2023-10-16

我正在制作一个简单的桌面应用程序,因为我正在学习Qt。 我想做一个按钮,如果你按下它,它会开始一个循环,直到你再次按下它。

这是我的基本代码:

void TestApp::on_pushButton_3_toggled(bool checked)
{
if (checked) {
ui->status_label->setText("Status: Testing!");
while (true) {
qDebug() <<"Test";
}
} else {
ui->status_label->setText("Status: Working!");
}
}

当我按下按钮启用它时,该程序运行良好。但是当我尝试禁用它时,由于 while 循环,它会崩溃。

我该如何解决这个问题?

提前感谢!

让我简要解释一下Qt应用程序的工作原理。当你调用QGuiApplicationQCoreApplicationexec()时,Qt将启动自己的主事件循环。
在该事件循环中,来自外部事件或内部事件的各种事件将排队等待处理。这将包括鼠标/键盘事件、窗口事件、信号/插槽事件等。 当你调用while(true){ ... }你的代码将永远不会返回到Qt的事件循环,它只会变得无响应。你可以把while(true){}解释为永远
所以,如果你想在按钮checked时运行qDebug() <<"Test";,你可以简单地通过调用 start(500( 来启动QTimer,或者在checked为 false 时停止(( 它。
然后,您可以将该QTimertimeout()信号连接到lambda函数或成员函数,以使用qDebug()打印出"Test"字符串。

void TestApp::aFuncToCreateConnection(){ // this could be the constructor
connect(ui->some_timer, &QTimer::timeout, [](){qDebug() << "Test" } );
}
void TestApp::on_pushButton_3_toggled(bool checked)
{
if (checked) {
ui->status_label->setText("Status: Testing!");
ui->some_timer->start(500);
} else {
ui->status_label->setText("Status: Working!");
ui->some_timer->stop();
}
}

您应该在UI中创建名称为some_timerQTimer实例。 您可以在此处了解有关Qt信号/时隙语法的更多信息。