QDebug
内部でどのように機能するかを理解するのが最善です。そうすれば、ニーズに合わせて簡単に変更できます。qDebug()
この関数を使用するたびに、QDebug
オブジェクトが返されます。デフォルトQDebug
では、を使用した後は常にスペースを出力しますoperator <<
。
クラスにはQDebug
内部的にが含まれていQString
ます。使用するたびoperator <<
に、その内部QStringに追加します。このQStringは、オブジェクトが破棄されqt_message_output(QtMsgType, char*)
たときに印刷されます。QDebug
デフォルトqt_message_output
では、常に文字列の後に改行が続きます。
通常の出力
qDebug() << "Var" << 1;
これにより、が出力されますVar 1
。これは、を呼び出すたびにスペースを追加するオブジェクトをqDebug
作成するためです。つまり、+ +1+になります。QDebug
operator <<
Var
スペースなし
を呼び出すたびにスペースを追加しないようQDebug::nospace
に指示するために使用できます。QDebug
operator <<
qDebug().nospace() << "Var" << 1;
Var1
そのQDebug
オブジェクトはもはやスペースを印刷していないので、これは出力されます。
新しい行なし
文字列の最後にを追加しないの\n
は少し難しいです。QDebug
内部的には文字列が破棄されたときにのみ文字列を渡すため、qt_message_output
そのQDebugオブジェクトの破棄を遅らせることができます-
QDebug deb = qDebug();
deb << "One" << "Two";
deb << "Three";
これにより、新しい行が印刷さOne Two Three
れて追加されます。
新しい行を印刷したくない場合は、の動作を変更する必要がありますqt_message_output
。これは、カスタムハンドラーをインストールすることで実行できます。
void customHandler(QtMsgType type, const char* msg) {
fprintf(stderr, msg);
fflush(stderr);
}
// Somewhere in your program
qInstallMsgHandler(customHandler);
qDebug() << "One" << "Two";
qDebug().noSpace() << "Three" << "Four";
これは印刷されますOne Two ThreeFour
。
これは、プログラム内のすべてのqDebugステートメントに影響することに注意してください。カスタムハンドラーを削除する場合は、を呼び出す必要がありますqInstallMsgHandler(0)
。
qDebug(const char * msg、...)
他の回答で示されているように、このqDebug
関数を使用して、と同様の形式で文字列を印刷することもできますprintf
。このようにして、によって追加される余分なスペースを回避できますQDebug
。
ただし、qDebug
内部では引き続きを使用qt_message_output
するため、独自のハンドラーをインストールしない限り、最後に改行を取得します。