在执行长时间操作之前,我正在调用QProgressDialog来通知用户执行进度。长操作正在等待线程终止。
问题是,当我使用showQProgressDialog方法时,进度对话框未完全构建,并且线程进入了线程的wait方法,如下图所示:
c++ - 如何等待QProgressDialog的构建?-LMLPHP
同时,当我使用execQProgressDialog方法时,进度对话框已完全构建,但是直到退出退出对话框后,才会调用wait方法,如下所示:
c++ - 如何等待QProgressDialog的构建?-LMLPHP
这是我正在使用的代码:

auto dialog = new QProgressDialog();
dialog->setWindowTitle("Wait");
dialog->setLabelText("Aborting optimization");

dialog->resize(100, 30);
dialog->show();

optimizerUi->terminate();
optimizerUi->wait();

dialog->hide();
在线程陷入wait方法之前,有什么方法可以等待或强制完全构建进度对话框,该方法需要很长的时间并阻塞主线程?谢谢您的任何建议。

最佳答案

您可以等待线程完成超时。如果线程完成,请关闭进度对话框。如果不是,请处理应用程序事件。

auto dialog = new QProgressDialog();
dialog->setWindowTitle("Wait");
dialog->setRange(0, 0);
dialog->setLabelText("Aborting optimization");
dialog->setCancelButton(nullptr);

dialog->resize(100, 30);
dialog->show();

optimizerUi->terminate();
while (!optimizerUi->wait(QDeadlineTimer{100}))
{
    QApplication::processEvents();
}
dialog->hide();

10-02 04:53