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+になります。QDebugoperator <<Var
スペースなし
を呼び出すたびにスペースを追加しないようQDebug::nospaceに指示するために使用できます。QDebugoperator <<
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するため、独自のハンドラーをインストールしない限り、最後に改行を取得します。