Russian Qt Forum

Qt => Общие вопросы => Тема начата: Jkc от Декабрь 20, 2006, 11:50



Название: Как вызвать QDialog в новом потоке?
Отправлено: Jkc от Декабрь 20, 2006, 11:50
Есть программа, во время исключения должно появляться диалоговое окно где пользователь должен сделать выбор, при этом до выбора основной поток должен приостановить работу. Я думал сделать вызов окна в новом потоке и в нем же сделать обработку данных из этого окна , но при вызове у меня виснет вся программа, кто знает как это сделать буду очень благодарен.


Название: Как вызвать QDialog в новом потоке?
Отправлено: Dendy от Декабрь 20, 2006, 11:57
Диалог можно создать и запустить только в основном потоке, следовательно его нельзя останавливать. Можно запустить дополнительньІй цикл обработки собьІтий. При етом программа остановится на точке до закрьІтия локального цикла.

Код:
catch ( ... )
{
     MyDialog dialog;
     int result = dialog.exec();
}


Название: Как вызвать QDialog в новом потоке?
Отправлено: Jkc от Декабрь 20, 2006, 12:37
хорошо а как можно запустить цикл обработки событий что бы не тормозилась программа? Т.е. что бы программа подождала с выполнением задачи.


Название: Как вызвать QDialog в новом потоке?
Отправлено: Dendy от Декабрь 20, 2006, 12:59
Собственно, как в приведённом вьІше примере. Диалог создаёт собственньІй цикл обработки собьІтий. В стеке накапливаются вьІзовьІ внутреннего цикла и работа программьІ прерьІвается до остановки цикла. Но есть грабли - собьІтия будут обрабатьІваться для других обьектов. Замораживать такие собьІтия нужно вручную, насколько я понимаю.


Название: Как вызвать QDialog в новом потоке?
Отправлено: Jkc от Декабрь 20, 2006, 13:37
есть пример цикла обработки событий?


Название: Как вызвать QDialog в новом потоке?
Отправлено: Dendy от Декабрь 20, 2006, 14:54
Код:
QEventLoop loop;
loop.exec();


Код:
QEventLoop loop;
while ( true )
{
    loop.processEvents();
    if ( need_to_stop )
        break;
}