Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Crazy Sage от Апрель 03, 2015, 12:55



Название: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Crazy Sage от Апрель 03, 2015, 12:55
Добрый день. Возникла необходимость в программе дожидаться выполнения внешнего процесса, но хочется в это время показывать пользователю не зависшее окно, а аккуратное сообщение о том, что ожидается завершение внешнего процесса.
Я сделал модальный диалог без кнопок, который нельзя закрыть и пытаюсь решить задачу следующим образом:
Код:
StatusMessage* message = new StatusMessage(this);//Создание того самого диалога
message->show();
QProcess* process = new QProcess(this);
process->execute(ext_program);
while(process->state()!=QProcess::NotRunning)
{
qApp->processEvents();
}

Внешняя программа и возвращение из неё отрабатываются корректно, но пока она работает интерфейс основной программы не перерисовывается. Что я делаю не так?


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: GreatSnake от Апрель 03, 2015, 13:13
Запускай через QProcess::​startDetached().


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Crazy Sage от Апрель 03, 2015, 13:20
startDetached() никак не позволяет следить за статусом процесса вроде. А организовывать дополнительные связи как-то не хочется.


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Пантер от Апрель 03, 2015, 13:25
Есть сигнал
Код
C++ (Qt)
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)
 


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Crazy Sage от Апрель 03, 2015, 13:28
startDetached() это статическая функция, к сигналу какого объекта присоедняться после её вызова?


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Пантер от Апрель 03, 2015, 13:31
startDetached() это статическая функция, к сигналу какого объекта присоедняться после её вызова?
Если это мне, то я не имел ввиду startDetached.


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: GreatSnake от Апрель 03, 2015, 14:39
startDetached() это статическая функция, к сигналу какого объекта присоедняться после её вызова?
Используй тогда QProcess::​start().


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: qate от Апрель 04, 2015, 15:39
Я сделал модальный диалог без кнопок, который нельзя закрыть

убивать


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Crazy Sage от Апрель 04, 2015, 16:21
Используй тогда QProcess::​start().

Спасибо, сработало.

убивать

А что такого? Делать отдельный виджет, блокировать события всего остального, что есть на экране, пока он активен - можно конечно, но нафига?


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Fregloin от Апрель 06, 2015, 09:39
QProgressDialog?


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Igors от Апрель 06, 2015, 10:31
А что такого? Делать отдельный виджет, блокировать события всего остального, что есть на экране, пока он активен - можно конечно, но нафига?
Часто (а может и в большинстве случаев) в этом есть смысл - иначе др события могут стать опасными. Напр пока выполняется процесс юзер взял да и еще раз его запустил.


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Crazy Sage от Апрель 06, 2015, 12:19
А что такого? Делать отдельный виджет, блокировать события всего остального, что есть на экране, пока он активен - можно конечно, но нафига?
Часто (а может и в большинстве случаев) в этом есть смысл - иначе др события могут стать опасными. Напр пока выполняется процесс юзер взял да и еще раз его запустил.

При висящем модальном диалоге пользователю сложновато будет выполнять какие-то другие действия в программе.


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: qate от Апрель 06, 2015, 12:49
убивать
А что такого? Делать отдельный виджет, блокировать события всего остального, что есть на экране, пока он активен - можно конечно, но нафига?

кнопка "отмена" нужна же, ведь нет гарантий работы вызванного процесса


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Crazy Sage от Апрель 06, 2015, 13:00
Вряд ли у него при этом будет состояние running


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: Igors от Апрель 06, 2015, 13:38
При висящем модальном диалоге пользователю сложновато будет выполнять какие-то другие действия в программе.
"Какие-то др действия" могут зависеть от результатов запуска и/или то что он "в полете", и эти проверки могут оказаться очень непростыми. В общем о граблях Вас пердупредили, а дальше сами смотрите


Название: Re: Перерисовка интерфейса во время ожидания QProcess
Отправлено: qate от Апрель 07, 2015, 12:54
Вряд ли у него при этом будет состояние running

он может зависнуть, будет running