在我的Qt应用中运行另一个可执行文件

时间:2012-12-26 08:09:32

标签: c++ qt executable qprocess

我写了两个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)运行。

我的错是什么? 请帮帮我。

3 个答案:

答案 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 &");