2013-05-05 121 views
5

我的程序中有一個按鈕,點擊它進行多次計算。我想在這段時間禁用它,當計算執行時不允許程序崩潰,但我的方法不起作用。QT - 如何禁用按鈕

void MainWindow::on_pushButton_clicked() 
{  
ui->pushButton->setEnabled(false); 

for() { CALCULATION } 

ui->pushButton->setEnabled(true); 
} 

功能setEnabled(false);不會撥動按鈕,我可以點擊它多少次我想要的。

+0

setEnabled()必須工作 – Blood 2013-05-05 15:25:13

+1

經過測試。這對我有用。 – gongzhitaao 2013-05-05 15:26:46

回答

4

這段代碼的問題在於消息循環的設計。在處理一條消息(在這種情況下是按鈕點擊的處理程序)時,不會處理其他消息,包括那些重新繪製小部件以反映其狀態更改的消息。現在,在您的功能中,您可以禁用該按鈕並在可以更新之前再次啓用它。

請注意,做冗長的計算是UI消息處理程序是一個壞主意,因爲它會鎖定整個UI。相反,使用異步模型(如工作線程)或使用計時器逐步進行計算。然後,您也可以看到該按鈕被禁用。

7

您的計算在主線程中完成,所以您的UI將被阻塞直到計算完成。在計算過程中ui不會被刷新,並且在計算結束時您將按鈕放回原處。所以在計算過程中ui沒有變化。

+0

如何在計算開始前強制更新? – 2016-09-21 09:28:05