Russian Qt Forum
Ноябрь 24, 2024, 06:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как вызвать QDialog в новом потоке?  (Прочитано 5151 раз)
Jkc
Гость
« : Декабрь 20, 2006, 11:50 »

Есть программа, во время исключения должно появляться диалоговое окно где пользователь должен сделать выбор, при этом до выбора основной поток должен приостановить работу. Я думал сделать вызов окна в новом потоке и в нем же сделать обработку данных из этого окна , но при вызове у меня виснет вся программа, кто знает как это сделать буду очень благодарен.
Записан
Dendy
Гость
« Ответ #1 : Декабрь 20, 2006, 11:57 »

Диалог можно создать и запустить только в основном потоке, следовательно его нельзя останавливать. Можно запустить дополнительньІй цикл обработки собьІтий. При етом программа остановится на точке до закрьІтия локального цикла.

Код:
catch ( ... )
{
     MyDialog dialog;
     int result = dialog.exec();
}
Записан
Jkc
Гость
« Ответ #2 : Декабрь 20, 2006, 12:37 »

хорошо а как можно запустить цикл обработки событий что бы не тормозилась программа? Т.е. что бы программа подождала с выполнением задачи.
Записан
Dendy
Гость
« Ответ #3 : Декабрь 20, 2006, 12:59 »

Собственно, как в приведённом вьІше примере. Диалог создаёт собственньІй цикл обработки собьІтий. В стеке накапливаются вьІзовьІ внутреннего цикла и работа программьІ прерьІвается до остановки цикла. Но есть грабли - собьІтия будут обрабатьІваться для других обьектов. Замораживать такие собьІтия нужно вручную, насколько я понимаю.
Записан
Jkc
Гость
« Ответ #4 : Декабрь 20, 2006, 13:37 »

есть пример цикла обработки событий?
Записан
Dendy
Гость
« Ответ #5 : Декабрь 20, 2006, 14:54 »

Код:
QEventLoop loop;
loop.exec();


Код:
QEventLoop loop;
while ( true )
{
    loop.processEvents();
    if ( need_to_stop )
        break;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 20.