2017-03-19 12 views
1

これまではqDebug().noquote()を使ってすべてを出力していました。 #import <QDebug>Qtで:qDebug()を使って `stderr`に出力するのと同じくらい簡単に` stdout`に出力できますか?

私はstdoutに出力するためにすべてが必要ですが、私はそれを簡単に行う方法がわかりません。

QTextStream cout(stdout, QIODevice::WriteOnly); 

しかし、新しいオブジェクトを作成することは簡単な#import <QDebug>より少しビットより面倒です:私が教えられたか、この。 qtでstdoutを処理するための良い/最も面倒な方法は何ですか?

答えて

2

あなたが言及した方法が最善の方法です。

QTextStream(stdout) << QString("utf8 literal") << endl; 
+0

が、 'QTextStream(STDOUT)' Unicodeをサポートしていません。これを修正する方法はありますか? – Akiva

+0

「ユニコードをサポートしていません」とはどういう意味ですか? 'QTextStream'はあなたのロケール(' QTextCodec :: codecForLocale')のデフォルトのエンコーディングまたはあなたが選択した他のエンコーディング( 'QTextStream :: setCodec')を' QString'(UTF-16)からデフォルトのエンコーディングに変換します。 –

+0

私が意味するのは、私のユニコードが 'qDebug()<<"≢≢≢ ";'の下にある私のシェルに正しく表示されていないということです。 – Akiva

2
:ソーステキストではなく、あなたがストリーム演算子に渡す前に QStringに変換する必要があり、その後、符号化ラテン-1である場合

QTextStream(stdout) << "Hello world!" << endl; 

:あなたは、新しいローカル変数を作成する必要はありません

qDebug(),などは、すべてデフォルトのメッセージハンドラにパイプされます。しかし、デバッグ文字列を別のストリームやファイルなどに書き込むことができます。メッセージハンドラ関数を定義し、qInstallMessageHandler()を使用してインストールするだけです。一緒にすべてを置く

、ここでは完全な例です:私はこれを受け入れるだろう

#include <QDebug> 

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) 
{ 
    QTextStream cout(stdout, QIODevice::WriteOnly); 
    cout << msg << endl; 
} 

int main(int argc, char *argv[]) 
{ 
    qInstallMessageHandler(myMessageOutput); 

    qDebug().noquote() << "Hello world!"; 
} 
関連する問題