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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Перерисовка интерфейса во время ожидания QProcess  (Прочитано 8341 раз)
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();
}

Внешняя программа и возвращение из неё отрабатываются корректно, но пока она работает интерфейс основной программы не перерисовывается. Что я делаю не так?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 03, 2015, 13:13 »

Запускай через QProcess::​startDetached().
Записан

Qt 5.11/4.8.7 (X11/Win)
Crazy Sage
Гость
« Ответ #2 : Апрель 03, 2015, 13:20 »

startDetached() никак не позволяет следить за статусом процесса вроде. А организовывать дополнительные связи как-то не хочется.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 03, 2015, 13:25 »

Есть сигнал
Код
C++ (Qt)
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Crazy Sage
Гость
« Ответ #4 : Апрель 03, 2015, 13:28 »

startDetached() это статическая функция, к сигналу какого объекта присоедняться после её вызова?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Апрель 03, 2015, 13:31 »

startDetached() это статическая функция, к сигналу какого объекта присоедняться после её вызова?
Если это мне, то я не имел ввиду startDetached.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Апрель 03, 2015, 14:39 »

startDetached() это статическая функция, к сигналу какого объекта присоедняться после её вызова?
Используй тогда QProcess::​start().
Записан

Qt 5.11/4.8.7 (X11/Win)
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #7 : Апрель 04, 2015, 15:39 »

Я сделал модальный диалог без кнопок, который нельзя закрыть

убивать
Записан
Crazy Sage
Гость
« Ответ #8 : Апрель 04, 2015, 16:21 »

Используй тогда QProcess::​start().

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

убивать

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

Сообщений: 1025


Просмотр профиля
« Ответ #9 : Апрель 06, 2015, 09:39 »

QProgressDialog?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 06, 2015, 10:31 »

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

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

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

Сообщений: 1175


Просмотр профиля
« Ответ #12 : Апрель 06, 2015, 12:49 »

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

кнопка "отмена" нужна же, ведь нет гарантий работы вызванного процесса
Записан
Crazy Sage
Гость
« Ответ #13 : Апрель 06, 2015, 13:00 »

Вряд ли у него при этом будет состояние running
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Апрель 06, 2015, 13:38 »

При висящем модальном диалоге пользователю сложновато будет выполнять какие-то другие действия в программе.
"Какие-то др действия" могут зависеть от результатов запуска и/или то что он "в полете", и эти проверки могут оказаться очень непростыми. В общем о граблях Вас пердупредили, а дальше сами смотрите
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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