【发布时间】:2018-09-15 11:38:01
【问题描述】:
为了学习 Qt,我决定构建一个井字游戏程序。用户界面很简单,但我偶然发现了一个我无法解决的问题。我希望人类用户能够与计算机对战,因此,我需要在 cpu 进行计算时阻止 UI。我尝试过使用 setEnabled 但它没有按照我想要的方式工作,我只是在前面放了一个 Qframe 并使用 hide() 和 show() 函数来阻止与用户的交互。问题是它不起作用。当我单击 QPushButton 时,单元格会更新并调用 show 函数。然后我做任何我需要的计算,当它完成时我只调用hide()。下面是一个示例代码。
void TicTacToe_Gui::on_cell11_clicked(){
ui->cell11->setText("wait...");
ui->cell11->repaint();
ui->frontPanel->show();
for(int i=0; i<=1000000000; i++){
}
ui->cell11->setText("done");
ui->frontPanel->hide();
}
其中单元格是 QPushButton。
好吧,当 for 循环中的代码正在运行并且我单击其他单元格时,其他按钮的动画(我的意思是推送动画)没有呈现,并且似乎 UI 被阻止但只要代码停止其他按钮更新,就像单击一样。检查下面的图片
我知道类似的问题已经被问过很多次,而且我已经阅读了其中的大部分内容,但我似乎无法解决问题。有人可以帮帮我吗?
【问题讨论】:
-
以下究竟是什么意思:我尝试使用 setEnabled,但它没有按照我想要的方式工作,您遇到了什么问题?你想要什么?
-
您可以通过 github、gist 或类似方式分享您的代码以更好地理解。