2017-03-12 7 views
1

QProcessを使用してコンソールアプリケーションと通信しています。私はいくつかの単語を書き、出力を読みます。しかし、私はQProcess経由で行を書きたい。それは* ARGV [] charにパラメータを渡すので、Qt | QProcess |コンソールアプリケーションに回線を書き込む

#include <iostream> 
#include <cstdlib> 
#include <fstream> 
#include <string> 
#include <algorithm> 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    string action; 
    do 
    { 
     cout << "(test)"; 
     cin >> action; 
     cout << action; 
     if(action.length() > 10) 
     { 
      cout << "\t very long string"; 
     } 
     cout << endl; 
    } 
    while(action != "exit"); 
    return 0; 
} 

だから、私はQProcess経由でパラメータを渡すことはできません::幹部やQProcessを開始:::たとえば、私は次のコンソールアプリケーションを持っています。私はQProcessを起動した後にそれを渡すべきです。私はQProcess :: writeを使用しようとしましたが、問題があります:使用する場合

process.write("oneWord\n"); 

私はうまくいくでしょう。しかし、私は

process.write("several words\n"); 

を使用している場合、私のプログラムは、個別にすべてのこの言葉を書きますし、コンソールアプリケーションを1つの文字列としてそれを認識しない

process.write("several\n"); 
process.write("words\n"); 

ように見えます。 、 QDataStreamを使用し、

process.write("\"several words"\\n"); 

process.write("\"several words\n""\); 

使用はメソッドQIODEvice::setOpenModeを保護し、QIODevice::Textフラグを設定し、二重括弧内の書き込みラインを\r\nなどの特殊記号を使用し、\t:私はさまざまな方法を使って試してみました異なる組み合わせ。また、私はQProcessはのQIODeviceを継承し、ファイル(入力&出力)のようにそれに対処する機会があることを、QProcess::write

process.write("several"); 
process.write("words\n"); 

私が知っている、複数の使用しようとしました。しかし、単語がファイルに別々にファイルに書き込まれるかどうかは関係ありません。私の場合、それは重要です。

誰でも手伝ってもらえますか?

+2

問題は、 'QProcess :: write'がアプリケーションにテキストを送る方法ではなく、アプリケーションがそれを読み込む方法に問題があります。 'cin >> action'は最初の空白までの文字列を読み込むので、' '複数の単語" "を単一の' 'アクション' 'として読み込むことはできません。あなたはおそらく['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)を探しています –

+0

標準IOストリームはストリームです。あなたは "メッセージ"を書くことはできませんし、いくつかの目に見えないメッセージの境界線があることを期待しています。すべてが単なる個々の文字です。そのように* cin *を使用するコードでは、空白は区切りとして解釈されるため、一度に1語を取得し、すべての空白が削除されます。 – hyde

答えて

-2

Thisあなたの問題を解決するには、私は信じています。

関連する問題