Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: juvf от Январь 26, 2011, 09:18



Название: Как вызывать диалоги из не GUI потока?
Отправлено: juvf от Январь 26, 2011, 09:18
Есть основной (GUI) поток. Есть другой поток занимающийся обменом по GSM модему. Иногда второму потоку нужно что-то от пользователя, например ввести пинкод. Хотелось бы вызвать статическую функцию какого-нибудь диалога, который вернет пинкод. что-то типа

QString pinCode = PinCodeDialog::getPinCode();

как такое в Qt реализовывается?

ps в билдере есть синхронизация с гуипотоком. можно из не гуи потока вызвать диалог с помощью Synchronize(). На время выполнения диалога не гуи поток останавливается. Synchronize позволяет избежать всякие сбои, которые возможны при обращении к одним данным из разных потоков.


Название: Re: Как вызывать диалоги из не GUI потока?
Отправлено: alexman от Январь 26, 2011, 09:24
Можно послать сигнал в GUI поток (при конекте указать ключ Qt::BlockingQueuedConnection); там показать диалог и установить флаг в текущем потоке. Конечно можно все это дело обернуть PinCodeDialog::getPinCode();


Название: Re: Как вызывать диалоги из не GUI потока?
Отправлено: juvf от Январь 26, 2011, 09:38
идея понятна, спасибо