我编写了两个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对象only进行访问。
编辑:
似乎可执行文件的路径不正确。以“ /”开头的任何内容都将被视为绝对路径。
您可能需要编写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();
并且正常工作。
另一种方法是将可执行文件直接放在根目录中:
(/ somthings)
您可以使用
#include <cstdlib>
std::system("/path/to/executable &");