2011-04-18 250 views
0

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

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

建议:使用qrand而非rand,请参阅:http://doc.qt.nokia.com/latest/qtglobal.html#qrand – snoofkin 2011-04-21 00:52:07

回答

7

你的应用程序冻结,因为你正在循环,从不让Qt做必要的处理。

你需要设置什么随机猜测是在类的构造函数,然后on_pushButton_clicked调用你只需要做if检查。即删除do while循环。

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

1

我不是QT专家,但是如果spinbox值不正确,您将无休止地循环使用此功能,并且用户无法再次点击spinbox。只要删除循环,并在类构造函数的某处设置randnum,那么事情应该没问题。

QT事件循环会照顾到你的程序保持活动状态,不需要你去做。

0

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

0

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

更好的解决办法是做Goz的建议,我强烈建议这样做。