1、在 UI 交互中,如果我们使用阻塞函数,界面就会发生假死,造成无响应状态,这对用户体验是非常不友好的,除非你的用户能接受。
// 下面演示的是在一个按钮的槽函数中,如果该按钮按下后,界面将会假死 5 秒钟
void MainWindow::on_pushButton_clicked(bool checked)
{
int ms = 5000;
QThread::msleep(ms);
}
2、为此我们可以利用 Qt 事件循环来稍微解决这个问题
// 该按钮按下后,界面将不会发生假死现象
void MainWindow::on_pushButton_clicked(bool checked)
{
int ms = 5000;
QEventLoop loop;
QTimer::singleShot(ms, &loop, &QEventLoop::quit);
loop.exec();
}
3、当然还有一种方式也能应对界面假死方式,比如以下
QCoreApplication::processEvents();
4、最后,在实际开发中,还会有其他种方式,毕竟方法总比困难多,只能说有什么需求就使用什么解决方案吧