Russian Qt Forum

Qt => Общие вопросы => Тема начата: TukiNov от Декабрь 14, 2006, 02:42



Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: TukiNov от Декабрь 14, 2006, 02:42
Можно как нить сделать чтобы , например по нажатию кнопки на форме, выполнялся исполняемый файл, в винде например это exe файл, или запускалась стороняя программа.
По документации ничего не нашёл :(


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: Dendy от Декабрь 14, 2006, 03:03
Копай в сторону QProcess.


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: Racheengel от Декабрь 14, 2006, 09:41
если ТОЛЬКО под виндой - ShellExecute рулит. Но она не переносимая.
Иначе QProcess.


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: Tonal от Декабрь 14, 2006, 11:16
Если из 4.2, то можно QDesktopServices::openUrl


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: TukiNov от Декабрь 14, 2006, 23:52
спасибо, буду пробовать, о результатах сообщу :)


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: simulacrum от Декабрь 20, 2006, 11:28
Интересно в подробностях. Я новичок в этом. Но я под Linux работаю. А там вроде все на этом построено. Просто пока еще только пытаюсь вьехать, как это делается...

Но так чтобы не просто запускалось, а передвать аргументы консольной программе и выводить резульатты в gui


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: Racheengel от Декабрь 20, 2006, 13:33
это через QProcess.


Название: Qt3.3.6 - запуск другой программы из своей
Отправлено: voron от Январь 01, 2007, 13:03
Я когда-то написал такую функцию. Работает.
Код:

//Процедура запуска другого приложения
int spawn (const char *name_program,  // Имя исполняемого файла
const char *parametr// Параметр
)
{
char *arg_list[] = {const_cast<char*>(name_program), const_cast<char*>(parametr), NULL};
#ifdef Q_WS_X11
pid_t id_process;
id_process = fork();

if (id_process != 0)
{
return id_process;
}
else
{
//char *par = arg_list[0];
execvp(name_program, arg_list);
abort();
}
#endif
#ifdef Q_WS_WIN
int id_process = -1;
char  commandline[256];//(char *)name_program;
if ((parametr!="")&&(parametr!=NULL))
{
strcpy(commandline, name_program);
strcat(commandline, (const char*)" ");
strcat(commandline, parametr);
}

STARTUPINFOA cif;
ZeroMemory(&cif, sizeof(STARTUPINFO));
cif.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION pi;
if (CreateProcessA(name_program, commandline, NULL, NULL, FALSE, NULL, NULL, NULL, &cif, &pi))
return id_process;
else return -1;
#endif
}