次の作業を行う簡単な方法はありますか? Qt
には、qDebug
の文字列を準備するヘルパークラスがありますか?
QString s = "value";
qDebug("abc" + s + "def");
私が知っている本当に簡単な方法はありません。できるよ:
QByteArray s = "value";
qDebug("abc" + s + "def");
または
QString s = "value";
qDebug("abc" + s.toLatin1() + "def");
以下を使用できます。
_qDebug().nospace() << "abc" << qPrintable(s) << "def";
_
nospace()
は、すべての引数の後にスペースが出力されないようにします(qDebug()
のデフォルトです)。
Qt Core 5.6ドキュメント によると、QString
でqDebug
を出力するには、_<QtGlobal>
_ヘッダーのqUtf8Printable()
を使用する必要があります。
次のようにする必要があります。
_QString s = "some text";
qDebug("%s", qUtf8Printable(s));
_
以下:
_QString s = "some text";
qDebug(qUtf8Printable(s));
_
見る:
オプション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
コードを次のように書き直してください。
QString s = "value";
qDebug() << "abc" << s << "def";
私はこの質問が少し古いことを知っていますが、ウェブでそれを検索するとき、それはほとんど一番上に表示されます。 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への暗黙的な変換を許可する他のタイプをスローできることです。