Название: QProcess::FailedToStart Отправлено: cresta от Февраль 25, 2009, 15:54 Добрый день!
Процесс не стартует. Исполняемый файл в наличии, права доступа соблюдены. Запуск вручную из консоли работает Как определить причину незапуска процесса из приложения? Qt4.2 mdv2008 Название: Re: QProcess::FailedToStart Отправлено: pastor от Февраль 25, 2009, 17:09 Былобы неплохо увидето код.
Для проверки, попробуй запустиьт через system: system("path/to/your_app"); Название: Re: QProcess::FailedToStart Отправлено: cresta от Февраль 25, 2009, 18:38 Код: class SChecker : public QProcess{ В чем проблема? Почему если указать явно путь при старте процесса, то стартует, через паблик переменную - нет? Переменная proicName пустая... И почему ничего нет в stdout? Название: Re: QProcess::FailedToStart Отправлено: pastor от Февраль 25, 2009, 18:52 Цитировать так не стартует, переменная procName почему-то пустая А ты внимательно посомтри на функцию main. Сначало создается объект SChecker, а потом происходит установка значения procName. Запуск процесса происходит в конструкторе SChecker. Ещё есть вопрос, зачен наследоваться от QProcess и при этом ещё создавать член класса QProcess (p) ? Название: Re: QProcess::FailedToStart Отправлено: pastor от Февраль 25, 2009, 18:55 И почему ничего нет в stdout? Код
Название: Re: QProcess::FailedToStart Отправлено: cresta от Февраль 25, 2009, 20:20 А, понятно. Значит передавать через стек имя процесса в конструктор.
Либо стартовать процесс не в конструкторе и передавать имя через отдельную функцию. Сейчас сделал так: изменил декларацию класса Код: class SChecker : public QProcess{ По-прежнему результата нет, хотя имя исполняемого файла в порядке: в конструкторе выводится /bin/df Чтобы контролировать визуально, стартанул калькулятор /bin/kcalc: сам калькулятор не появляется, хотя в слоте pilotStateChanged трижды изменяется состояние процесса: сначала приходит состояние 1(Starting), затем 2 (Running), затем 0 (NotRunning) Слот pilotError молчит... Всё-таки, почему калькулятора нет? P.S. О наследовании: иначе, чем сделано сейчас, у меня сигналы не доходят до слотов P.P.S. А что неправильно в этой строке: output = p->readAllStandardOutput (); // <----- ?? Название: Re: QProcess::FailedToStart Отправлено: pastor от Февраль 25, 2009, 20:22 P.S. О наследовании: иначе, чем сделано сейчас, у меня сигналы не доходят до слотов Для реализации сигналов слотов достаточно наследоваться от QObject: Код
Название: Re: QProcess::FailedToStart Отправлено: pastor от Февраль 25, 2009, 20:27 P.P.S. А что неправильно в этой строке: output = p->readAllStandardOutput (); // <----- ?? У тебя было написано readAllStandardOutput(), я изменил на p->readAllStandardOutput (), см. свой конструктор: Код
Название: Re: QProcess::FailedToStart Отправлено: BRE от Февраль 25, 2009, 20:34 Чтобы контролировать визуально, стартанул калькулятор /bin/kcalc: сам калькулятор не появляется, хотя в слоте pilotStateChanged трижды изменяется состояние процесса: сначала приходит состояние 1(Starting), затем 2 (Running), затем 0 (NotRunning) Слот pilotError молчит... Всё-таки, почему калькулятора нет? А ты ему в аргументах передаешь "/", он запускается, пугается (выдает в консоль сообщение) и выходит. Убери аргумент. Название: Re: QProcess::FailedToStart Отправлено: cresta от Февраль 25, 2009, 21:08 Да, действительно пугается :)
Только я пробовал передавать "" вместо "/", а надо было просто неинициализированный список передавать. Сейчас почти все правильно, за исключением кодировки выводимой в stdout строки. Ну с этим я сам попробую разобраться. Цитировать Для реализации сигналов слотов достаточно наследоваться от QObject: В этом случае я получаю ошибки: ругается на то, что start, readAllStandardOutput и все прочие члены класса не являются членами класса QObject. Собственно, так оно и есть. Если эти члены задекларировать в своём .h, то тут уже другая ошибка: линкер спотыкается undefined reference to `SChecker::start(QString const&, QStringList const&)' Как правильно это делается? Название: Re: QProcess::FailedToStart Отправлено: pastor от Февраль 25, 2009, 21:19 В этом случае я получаю ошибки: ругается на то, что start, readAllStandardOutput и все прочие члены класса не являются членами класса QObject. Собственно, так оно и есть. Покажите код где ругается. Как правильно это делается? Все зависит от задачи. Если создаешь объект (proc) класса SChecker и далее с нима работаешь (proc-start(...), etc), то тогда наследуйся от QProcess, но тогда не нужен член класса QProcess *p. Название: Re: QProcess::FailedToStart Отправлено: cresta от Февраль 25, 2009, 22:37 Цитировать Если создаешь объект (proc) класса SChecker и далее с нима работаешь (proc-start(...), etc), то тогда наследуйся от QProcess, но тогда не нужен член класса QProcess *p. Понял. Вызывать proc->start в main, а не p->start в конструкторе. Ну собственно весь вопрос исчерпан. Спасибо всем |