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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск программы, quit основной [решено]  (Прочитано 5189 раз)
iks
Гость
« : Май 23, 2011, 23:05 »

Есть такая задача запустить внешнюю программу и завершить работу основной, так чтоб запущенная продолжала работать.
Такое решение не подходит
Код
C++ (Qt)
   #if (defined(_WIN32) || defined(_WIN64))
   //--Windows
   QProcess *proc = new QProcess;
   proc->start(QApplication::applicationDirPath()+"/update.exe -m");
   qApp->quit();
   #else
   //--Linux
   #endif
Внешняя программа запускается, но окно основной продолжает висеть и из этого получается что смысла от таких танцев ноль, так как update должна скачать новые файлы с заменой имеющихся на компе, а так как основное приложение не закрылось то и бинарник в Windows само собой не перезапишется.
---------------------------------------
Может кто подскажет нормальное решение, под Windows, на Linux это решается попроще.
« Последнее редактирование: Май 24, 2011, 08:52 от iks » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Май 23, 2011, 23:09 »

bool QProcess::startDetached ( const QString & program ) [static]
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
iks
Гость
« Ответ #2 : Май 23, 2011, 23:32 »

Похоже проблема не в запуске проги а в
Код:
qApp->quit();
не срабатывает, так как с крестика закрывается основная и запущеная продолжает висеть
« Последнее редактирование: Май 25, 2011, 18:30 от iks » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Май 24, 2011, 02:30 »

Код:
qApp->quit();
не срабатывает, так как с крестика закрывается основная и запущена продолжает висеть
Обычно это может происходить, если exec() у апликейшена ещё не запущен.
Записан
iks
Гость
« Ответ #4 : Май 24, 2011, 06:41 »

Обычно это может происходить, если exec() у апликейшена ещё не запущен.
Спасибо, так оно и было, решил простым способом вот полный код кому надо
Код
C++ (Qt)
QProcess::startDetached(QApplication::applicationDirPath()+"/update.exe -m");
 
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), qApp, SLOT(quit()));
timer->start(500);
return;
Закрывается как exec() запустился
-----------------------------------
Просто это в проверке обновлений, если они есть то запускается сразу при старте программы, другая программа для скачивания этих обновлений и замены файлов основной проги.
Если в процессе выполнения а не при старте основной то само собой такие танцы уже не понадобятся т.к. exec() уже запускается и таймер не к чему будет
« Последнее редактирование: Май 24, 2011, 08:52 от iks » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #5 : Май 24, 2011, 07:29 »

Код
C++ (Qt)
QProcess *proc = new QProcess;
proc->startDetached(QApplication::applicationDirPath()+"/update.exe -m");
 
Замени на
Код
C++ (Qt)
QProcess::startDetached(QApplication::applicationDirPath()+"/update.exe -m");
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
SASA
Гость
« Ответ #6 : Май 24, 2011, 09:50 »

Я так полагаю, что это в районе main. Может проще так.
Код:
   #if (defined(_WIN32) || defined(_WIN64))
    //--Windows
   QProcess::startDetached(QApplication::applicationDirPath()+"/update.exe -m");
    return 0;
    #else
    //--Linux
    #endif
Записан
iks
Гость
« Ответ #7 : Май 24, 2011, 14:28 »

Это где душе угодно, у меня в MainWindow, просто по проге мне там удобней, я проверку наличия самих обновлений провожу через mySql, а раньше я ее не подключаю. А из-за этого переносить подключение к mySql в main как то не хочется, и тут вроде неплохо сидит =). Да и под Linux я обхожусь обычным диалогом, что мол неплохо было бы обновить прогу, т. к. обновление происходит через "Менеджер обновлений"
« Последнее редактирование: Май 24, 2011, 14:48 от iks » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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