1

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

我的错是什么?请帮我。

4

3 回答 3

3

问题是这 P.start(programPath);是一个非阻塞操作。此外,应用程序输出被重定向,并且只能从 Qprocess 对象访问

编辑:

似乎可执行文件的路径不正确。以“/”开头的任何内容都将被视为绝对路径。

您可能需要编写一个QObject子类来监视您启动的进程。正如kassak 指出的那样,该对象将捕获进程信号。

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 )) );
于 2012-12-26T10:56:10.803 回答
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();

它工作正常。

另一种方法是将可执行文件直接放在根目录下:

(/ somthings)

于 2012-12-28T05:20:03.840 回答
-1

您可以使用

#include <cstdlib>
std::system("/path/to/executable &");
于 2012-12-26T08:25:01.357 回答