我写了两个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
)运行。
我的错是什么? 请帮帮我。
答案 0 :(得分:3)
问题是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 )) );
答案 1 :(得分:1)
我的错是走向可执行的道路。
我编辑它变得简单并让它工作。
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)
答案 2 :(得分:-1)
您可以使用
#include <cstdlib>
std::system("/path/to/executable &");