0

这些天我正在学习QT,我想测试做while循环,实际登录正常工作,但在QT中应用程序冻结..我在头文件(公共)中定义了randnum和猜测

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

4 回答 4

7

您的应用程序冻结,因为您正在循环并且从不让 Qt 进行必要的处理。

您需要在类构造函数中设置随机猜测,然后在 on_pushButton_clicked 调用上,您只需执行 if 检查。即删除do while 循环。

代码将退出回调函数,然后控制权将返回给 Qt,允许用户再次猜测。

于 2011-04-18T08:45:35.663 回答
1

我不是 QT 专家,但是如果 spinbox 的值不正确,你会在这个函数中无限循环,用户没有再次点击 spinbox 的可能性。只需删除循环并randnum在类构造函数中设置某处,那么事情应该没问题。

QT 事件循环将负责让您的程序保持活力,您无需这样做。

于 2011-04-18T08:45:15.083 回答
0

如果您做出了不正确的猜测(即guess != randnum),那么您将无限期地重新进入while 循环......即没有中断。您只需在收到QSpinBox::valueChanged().

于 2011-04-18T08:47:46.910 回答
0

如果用户没有选择正确的数字,则通过调用 QCoreApplication::processEvents() 告诉 Qt 处理事件。

更好的解决方案是按照 Goz 的建议去做,我强烈建议这样做。

于 2011-04-18T08:53:22.487 回答