【问题标题】:Run another executable in my Qt app在我的 Qt 应用程序中运行另一个可执行文件
【发布时间】:2012-12-26 08:09:31
【问题描述】:

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

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

【问题讨论】:

  • 连接信号void error ( QProcess::ProcessError error ); void finished ( int exitCode, QProcess::ExitStatus ex); void started (); void stateChanged ( QProcess::ProcessState newState ); 看看发生了什么
  • @kassak 那应该是一个实际的答案:)
  • QObject::connect(&P,SIGNAL(error(QProcess::ProcessError)),);你是这个意思?我应该为第三个参数写什么?我的意思是如何看到这个信号的结果?

标签: c++ qt executable qprocess


【解决方案1】:

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

【讨论】:

  • 我的两个应用程序都是 Gui ,我想同时运行它们。我的意思是当第二个应用程序运行时,第一个应用程序窃取运行。我该怎么做。
【解决方案2】:

我的错在于可执行文件的路径。

我对其进行了编辑,非常简单并且可以使用。

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)

【讨论】:

  • 不要把你的可执行文件放在根目录下。只是不要
【解决方案3】:

你可以使用

#include <cstdlib>
std::system("/path/to/executable &");

【讨论】:

  • 这不会解决 OP 的问题。如果 QProcess 不能执行二进制文件, std::system() 也不能。此外,您的代码移植性较差(哪些系统可以识别&amp;?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2020-12-15
相关资源
最近更新 更多