程序因 While 循环而崩溃
Program crashes because of a While loop
我正在制作一个简单的桌面应用程序,因为我正在学习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应用程序的工作原理。当你调用QGuiApplication
或QCoreApplication
exec()
时,Qt将启动自己的主事件循环。
在该事件循环中,来自外部事件或内部事件的各种事件将排队等待处理。这将包括鼠标/键盘事件、窗口事件、信号/插槽事件等。 当你调用while(true){ ... }
你的代码将永远不会返回到Qt的事件循环,它只会变得无响应。你可以把while(true){}
解释为永远。
所以,如果你想在按钮checked
时运行qDebug() <<"Test";
,你可以简单地通过调用 start(500( 来启动QTimer
,或者在checked
为 false 时停止(( 它。
然后,您可以将该QTimer
的timeout()
信号连接到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_timer
的QTimer
实例。 您可以在此处了解有关Qt信号/时隙语法的更多信息。
相关文章:
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- For 循环在尝试读取数组 c++ 时程序崩溃
- 在 mmap'ed 区域上使用 memcpy 崩溃,for 循环不会
- C++代码崩溃并具有无限循环
- 程序因 While 循环而崩溃
- 当通过tcp接收编码图像的消息时,zmq在第二个循环中崩溃
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 我需要做一个空函数循环回来,而不会让它崩溃或跳过
- 布雷森汉姆线抽屉在渲染任何内容之前经过一定循环后崩溃
- 循环导致文件崩溃
- 使用自动循环时代码崩溃
- std::在循环中计算重复字符时擦除崩溃
- 当循环崩溃时,不向数组添加单词
- 程序在循环执行后崩溃
- 控制台在结束时崩溃(循环)未超出限制错误
- 这个循环如何使我的程序崩溃
- 模态qprogressdialog :: setValue()导致嵌套事件循环崩溃
- 文字背景颜色更改后C 中的许多循环崩溃!为什么
- 对于循环,大量崩溃了
- 尝试拆分循环链表.显示输出但崩溃.在 IDEone 中显示运行时错误