したがって、qDebug()
を使用してQString
を出力すると、出力に突然引用符が表示されます。
_int main()
{
QString str = "hello world"; //Classic
qDebug() << str; //Output: "hello world"
//Expected Ouput: hello world
}
_
qPrintable(const QString)
でこれを解決できることは知っていますが、なぜQString
がそのように機能するのか疑問に思っていました。また、QString
内に方法を変更するメソッドがありますか。印刷?
qDebug()
の実装によるものです。
ソースコード から:
inline QDebug &operator<<(QChar t) { stream->ts << '\'' << t << '\''; return maybeSpace(); }
inline QDebug &operator<<(const char* t) { stream->ts << QString::fromAscii(t); return maybeSpace(); }
inline QDebug &operator<<(const QString & t) { stream->ts << '\"' << t << '\"'; return maybeSpace(); }
したがって、
QChar a = 'H';
char b = 'H';
QString c = "Hello";
qDebug()<<a;
qDebug()<<b;
qDebug()<<c;
出力
'H'
H
"Hello"
では、なぜQtはこれを行うのですか? qDebug
はデバッグを目的としているため、さまざまな種類の入力はqDebug
を介してテキストストリーム出力になります。
たとえば、qDebug
はブール値をテキスト式に出力しますtrue
/false
:
inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); }
true
またはfalse
を端末に出力します。したがって、QString
を格納するtrue
がある場合は、タイプを指定するために引用符"
が必要です。
Qt 5.4には、これを無効にできる新機能があります。引用するには ドキュメント :
QDebug&QDebug :: noquote()
QChar、QString、およびQByteArrayの内容を引用符で囲む自動挿入を無効にし、ストリームへの参照を返します。
この機能はQt5.4で導入されました。
Quote()およびmaybeQuote()も参照してください。
(エンファシスマイン。)
この機能の使用方法の例を次に示します。
QDebug debug = qDebug();
debug << QString("This string is quoted") << endl;
debug.noquote();
debug << QString("This string is not") << endl;
もう1つのオプションは、QTextStream
をstdout
とともに使用することです。 ドキュメント にこの例があります:
QTextStream out(stdout);
out << "Qt rocks!" << endl;
Qt 4:文字列にASCIIのみが含まれている場合、次の回避策が役立ちます。
qDebug() << QString("TEST").toLatin1().data();
const char *
にキャストするだけです
qDebug() << (const char *)yourQString.toStdString().c_str();