Как дождаться построения QProgressDialog?
Перед выполнением длительной операции я вызываю
QProgressDialog
для информирования пользователя о ходе выполнения. Долгие операции ждут завершения потока.
Проблема в том, что когда я использую
show
метод
QProgressDialog
, диалоговое окно прогресса не полностью построено, и поток переходит в
wait
способ резьбы, как вы можете видеть на рисунке ниже:
Между тем, когда я использую
exec
метод
QProgressDialog
, диалог выполнения полностью построен, но
wait
не вызывается, пока я не выйду из диалогового окна прогресса, как вы можете видеть здесь:
Это код, который я использую:
auto dialog = new QProgressDialog();
dialog->setWindowTitle("Wait");
dialog->setLabelText("Aborting optimization");
dialog->resize(100, 30);
dialog->show();
optimizerUi->terminate();
optimizerUi->wait();
dialog->hide();
Есть ли способ подождать или заставить диалоговое окно прогресса быть полностью построенным до того, как поток попадет в
wait
метод, который занимает довольно много времени и блокирует основной поток? Спасибо за любое предложение.
1 ответ
Вы можете дождаться завершения потока с некоторым таймаутом. Если поток завершен, закройте диалоговое окно выполнения. Если это не так, обработайте события приложения.
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();