Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Mike-Aiki от Июль 18, 2013, 12:16



Название: Вывод модального диалога из сценария, выполняющегося в другом потоке
Отправлено: Mike-Aiki от Июль 18, 2013, 12:16
Дано: сценарий выполняется в вспомогательном потоке, по ходу выполнения сценария нужно выводить модальные диалоги (ввод данных, подтверждение чего-либо, просто информационные), соответственно, с приостановкой работы сценария. 
И что-то заклинило меня - как это сделать, с учётом того, что окно диалога (GUI) можно выводить только в основном потоке?


Название: Re: Вывод модального диалога из сценария, выполняющегося в другом потоке
Отправлено: Kurles от Июль 18, 2013, 12:43
Код
C++ (Qt)
   int retVal;
   int inputVal;
   QMetaObject::invokeMethod(mainThreadObject, "showDialogAndRetValue", Qt::BlockingQueuedConnection, Q_RETURN_ARG(int, retVal), Q_ARG(int, inputVal));
Если я правильно понял задачу, то примерно вот так. mainThreadObject - объект, с которого нужно получить данные, showDialogAndRetValue - слот в объекте mainThreadObject, который сформирует, выведет диалог и вернет введенные данные, retVal - возвращаемое значение и inputVal - входящий параметр для функции int mainThreadObject->showDialogAndRetValue(int).


Название: Re: Вывод модального диалога из сценария, выполняющегося в другом потоке
Отправлено: Mike-Aiki от Июль 18, 2013, 13:53
Ага, спасибо за флаг Qt::BlockingQueuedConnection !  :)  Для проверки без возврата параметров попробовал просто connect() с этим флагом - окно вызывается, сценарий ждёт. Спасибо ещё раз!