QT несколько асинхронных модальных диалогов - PullRequest
0 голосов
/ 17 января 2012

В моей программе есть цикл, в котором есть что-то вроде этого:

QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(path)));

Эта функция вызывается несколько раз.В ответ на запрос программа выводит модальное диалоговое окно (например, обычный QDialog).Проблема в том, что я хочу, чтобы диалоги появлялись один за другим, а не все сразу, как это происходило сейчас.

Я пытался использовать

QList<QEventLoop *> stack;

Один QEventLoop для каждого "жду "диалог.Но мне кажется, что это плохое решение.

1 Ответ

0 голосов
/ 17 января 2012

Вам не нужно использовать QEventLoop.

Если диалоговое окно является модальным, , тогда все остальные не получат ввод .В этом случае вы должны отправить сигнал, когда диалог закрыт.Вы можете использовать QDialog::Finished(int) например.Приемник сигнала - это не объект, который открыл диалоговое окно.

//slot
void showDialog(){
 if(msg.size() <= 0)
  return;
 //create dialog here
 connect(createdDialog, SIGNAL(finished(int)), this, SLOT(showDialog()));
}

И вы можете вызвать этот метод самостоятельно для первого сообщения.

Если диалоговое окно не является модальным, тогда вынеобходимо использовать singleshot QTimer, чтобы задержать следующий диалог.По сути, каждый раз, когда вы отображаете диалог, вы вычисляете самое раннее время, когда вы хотите, чтобы другой диалог отображался, и вы устанавливаете таймер с этим временем.Когда он запускается, вы проверяете сообщение и открываете диалоговое окно и т. Д. ...

Однако мне интересно, являются ли диалоги лучшим способом показать непрерывный ввод информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...