web-dev-qa-db-ja.com

qDebugで文字列リテラルとQStringを印刷する方法は?

次の作業を行う簡単な方法はありますか? Qtには、qDebugの文字列を準備するヘルパークラスがありますか?

QString s = "value";
qDebug("abc" + s + "def");
28
Meysam

私が知っている本当に簡単な方法はありません。できるよ:

QByteArray s = "value";
qDebug("abc" + s + "def");

または

QString s = "value";
qDebug("abc" + s.toLatin1() + "def");
21
Greenflow

以下を使用できます。

_qDebug().nospace() << "abc" << qPrintable(s) << "def";
_

nospace()は、すべての引数の後にスペースが出力されないようにします(qDebug()のデフォルトです)。

23
Kurt Pattyn

Qt Core 5.6ドキュメント によると、QStringqDebugを出力するには、_<QtGlobal>_ヘッダーのqUtf8Printable()を使用する必要があります。

次のようにする必要があります。

_QString s = "some text";
qDebug("%s", qUtf8Printable(s));
_

以下:

_QString s = "some text";
qDebug(qUtf8Printable(s));
_

見る:

10
Krzysiek

オプション1:qデバッグのデフォルトモードのC文字列形式と変数引数リスト(printfなど)を使用します。

qDebug("abc%sdef", s.toLatin1().constData());

オプション2:オーバーロードされた<<演算子でC++バージョンを使用します。

#include <QtDebug>
qDebug().nospace() << "abc" << qPrintable(s) << "def";

リファレンス: https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug

6
bleater

コードを次のように書き直してください。

QString s = "value";
qDebug() << "abc" << s << "def";
3
troyane

私はこの質問が少し古いことを知っていますが、ウェブでそれを検索するとき、それはほとんど一番上に表示されます。 qDebug(QDebugに特化した)の演算子をオーバーロードして、std :: stringsを次のように受け入れることができます。

inline QDebug operator<<(QDebug dbg, const std::string& str)
{
    dbg.nospace() << QString::fromStdString(str);
    return dbg.space();
}

このことは私のプロジェクトのすべてで何年もの間、デフォルトではまだそこにないことをほとんど忘れています。

その後、qDebug()で<<を使用すると、はるかに使いやすくなります。 QStringとstd :: stringを混在させることもできます。いくつかの追加の(しかし実際には意図されていない)機能は、整数またはstd :: stringへの暗黙的な変換を許可する他のタイプをスローできることです。

1
JAV