这些天我正在学习QT,我想测试do while循环,实际登录正常,但在QT中应用程序冻结.. 我在头文件中定义了randnum和guess(public)
void MainWindow::on_pushButton_clicked()
{
srand (time(NULL));
randnum = rand() % 10 +1;
do {
guess = ui->spinBox->value();
if (guess < randnum)
{
ui->label->setText("try something big");
}
else if (guess > randnum)
{
ui->label->setText("try something small");
}
else
ui->label->setText("YAY?");
} while (guess != randnum);
}
请告诉我如何找到冻结的原因..谢谢!
答案 0 :(得分:7)
您的应用程序冻结是因为您正在循环并且永远不会让Qt进行必要的处理。
您需要设置类构造函数中随机猜测的内容,然后在on_pushButton_clicked调用上,您需要执行if检查。即删除do while循环。
代码将退出回调函数,然后控件将返回Qt,允许用户再次猜测。
答案 1 :(得分:1)
我不是QT专家,但如果spinbox值不正确,您将在此函数中无休止地循环,并且用户无法再次单击旋转框。只需删除循环并在类构造函数中的某处设置randnum
,那么事情应该没问题。
QT事件循环将负责保持您的程序活着,无需您这样做。
答案 2 :(得分:0)
如果您做出了不正确的猜测(即猜测!= randnum),那么您将无限期地重新进入while循环...即没有中断。您只需在收到QSpinBox::valueChanged()
时检查猜测。
答案 3 :(得分:0)
如果用户没有选择正确的号码,请告诉Qt通过调用QCoreApplication :: processEvents()来处理事件。
更好的解决方案是做Goz的建议,我强烈建议这样做。