2011-04-18 214 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的建議,我強烈建議這樣做。