0

QTアプリからプロセスを開始し、その終了イベントをキャッチしたいと思います。これは、メソッドQProcess :: start()で実行されます。ただし、startDetached()とは異なり、プロセスの標準出力はバッファーにリダイレクトされます。私はそれを望んでいません。
無効にする方法が見つかりません。醜い回避策は、setStandardOutputFile( "/ dev / stdout")を呼び出すことです。

test.h

#ifndef MY_TEST_H
#define MY_TEST_H

#include <QCoreApplication>

class MyApp : public QCoreApplication {
  Q_OBJECT  
  private Q_SLOTS:
    void subprocessStarted();
    void subprocessFinished(int);
  public:
    MyApp( int & argc, char ** argv );
};

#endif

test.cpp

#include "test.h"

#include <QProcess>
#include <QCoreApplication>
#include <stdio.h>

#define ENTRY printf("%s\n", __PRETTY_FUNCTION__)

MyApp::MyApp( int & argc, char ** argv ) : QCoreApplication(argc, argv) {
  ENTRY;

  QProcess *process = new QProcess();
  //process->setStandardOutputFile("/dev/stdout");
  process->start("/bin/echo aaa");
  bool b;
  b = connect(process, SIGNAL(started()), SLOT(subprocessStarted()));
  printf("connect started %d\n", b);
  b = connect(process, SIGNAL(finished(int)), SLOT(subprocessFinished(int)));
  printf("connect finished %d\n", b);
}
void MyApp::subprocessStarted() {
  ENTRY;
}
void MyApp::subprocessFinished(int ret) {
  ENTRY;
  printf("%d\n", ret);
}

int main(int argc, char *argv[]) {
  ENTRY;
  MyApp a(argc, argv);
  return a.exec();
}
4

1 に答える 1

1

QProcess :: closeReadChannel(ProcessChannelチャネル)は機能しますか?

読み取りチャネルチャネルを閉じます。この関数を呼び出した後、QProcessはチャネルでデータを受信しなくなります。すでに受信されているデータは、引き続き読み取ることができます。プロセスの出力に関心がない場合は、この関数を呼び出してメモリを節約します。

このような-

QProcess *process = new QProcess();
process->start("/bin/echo aaa");
process->closeReadChannel(QProcess::StandardOutput);
process->closeReadChannel(QProcess::StandardError);
于 2013-03-15T03:58:47.793 に答える