Я написал два приложения 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
) работает.
В чем я виновата?
Пожалуйста, помогите мне.
проблема в том, что 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 )) );
Моя вина была в пути к исполняемому файлу.
Я редактирую это очень просто и получил его работать.
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)
Ты можешь использовать
#include <cstdlib>
std::system("/path/to/executable &");