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

问题描述 投票:1回答:3

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

我怎么了?请帮助我。

c++ qt executable qprocess
3个回答
3
投票

问题是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 )) );

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)


-1
投票

您可以使用

#include <cstdlib>
std::system("/path/to/executable &");
© www.soinside.com 2019 - 2024. All rights reserved.