Запустите другой исполняемый файл в моем приложении Qt

Я написал два приложения Qt. Один является основным, а другой — побочным.

Я использую Linux.
Я читаю о QProcess поэтому я написал этот код:

 QApplication a(argc, argv);
MainWindow w;

w.show();
QProcess P(&w);
QString programPath;
programPath=
"/Documents/Qt/test1-build-desktop-Qt_4_8_1_in_PATH__System__Release/test1";
P.start(programPath);

return a.exec();

Однако ничего не происходит и только мое основное приложение (w) работает.

В чем я виновата?
Пожалуйста, помогите мне.

1

Решение

проблема в том, что P.start(programPath); это неблокирующая операция. Кроме того, выходные данные приложения перенаправляются и могут быть доступны из объекта Qprocess только.

Редактировать:

Кажется, что путь к исполняемому файлу неверен. Все, что начинается с «/» будет считаться абсолютным путем.

Вам, вероятно, нужно написать QObject подкласс для мониторинга процесса, который вы начали. Этот объект будет ловить сигналы процесса, как указал Касак.

class ProcessMonitor : public QObject {
Q_OBJECT

public slots:

void notifyStart();

void handleError( QProcess::ProcessError error );

void notifyStop(int exitCode, QProcess::ExitStatus ex);
}

В каждом слоте вы можете просто напечатать сообщение. Тогда вы можете сделать соединения

ProcessMonitor montinor;
QObject::connect(&P,SIGNAL(error(QProcess::ProcessError)),
&monitor,SLOT(handleError( QProcess::ProcessError error )) );
3

Другие решения

Моя вина была в пути к исполняемому файлу.

Я редактирую это очень просто и получил его работать.

QApplication a(argc, argv);
MainWindow w;
w.show();
QProcess P(&w);
QString programPath;
programPath=
"/home/erfan/Documents/Qt/test1-build-desktop- Qt_4_8_1_in_PATH__System__Release/test1";
P.start(programPath);
return a.exec();

И это работает правильно.

Другой способ — поместить исполняемый файл прямо в root:

(/ somthings)

1

Ты можешь использовать

#include <cstdlib>
std::system("/path/to/executable &");
-1
По вопросам рекламы [email protected]