QT - 如何禁用按钮

wit*_*rlo 5 c++ qt

我的程序中有一个按钮,点击它后做了很多计算.我想在这段时间禁用它,当执行计算不允许程序崩溃但我的方法不起作用.

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

for( ) { CALCULATION }

ui->pushButton->setEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)

函数setEnabled(false); 不会按下按钮,我可以点击它多少次我想要.

小智 7

您的计算是在主线程中完成的,因此您的ui将被阻止,直到计算完成.在计算过程中不会刷新ui,并在计算结束时放回按钮.因此在计算过程中ui没有变化.


Ulr*_*rdt 5

此代码的问题在于消息循环的设计。在处理一条消息(在这种情况下为按钮单击的处理程序)时,不会处理其他消息,包括重新绘制小部件以反映其状态更改的消息。现在,在您的功能中,您可以禁用该按钮,然后再次启用它,然后才能对其进行更新。

请注意,进行冗长的计算是UI消息处理程序是一个坏主意,因为它会锁定整个UI。而是使用异步模型(例如工作线程)或使用计时器逐步进行计算。然后,您还可以看到该按钮被禁用。