QT做while循环

时间:2011-04-18 08:39:44

标签: c++ qt qt4 do-while

这些天我正在学习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);
}

请告诉我如何找到冻结的原因..谢谢!

4 个答案:

答案 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的建议,我强烈建议这样做。