1

私は 2 つの Qt アプリケーションを作成しました。1つはメインで、もう1つはサイドウェイです。

私は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 に答える