2013-03-15 104 views
0

我想從QT應用程序啓動一個進程並捕獲它的終止事件。它用方法QProcess :: start()完成。但與startDetached()不同,該進程的標準輸出被重定向到緩衝區。我不想那樣。
我找不到如何禁用它。一個醜陋的解決方法是調用setStandardOutputFile( 「的/ dev /標準輸出」)QProcess禁用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(); 
} 

回答

1

爲您做QProcess::closeReadChannel(ProcessChannel channel)工作?

關閉讀取通道通道。調用此函數後,QProcess 將不再接收該通道上的數據。任何已收到 的數據仍可供閱讀。如果您對過程的輸出不感興趣,請將此函數調用爲 保存內存。

像這個 -

QProcess *process = new QProcess(); 
process->start("/bin/echo aaa"); 
process->closeReadChannel(QProcess::StandardOutput); 
process->closeReadChannel(QProcess::StandardError);