私はこのようなことをしようとしています:
QString string;
// do things...
std::cout << string << std::endl;
しかし、コードはコンパイルされません。qstringのコンテンツをコンソールに出力する方法(たとえば、デバッグ目的またはその他の理由)?に変換する方法QString
はstd::string
?
私はこのようなことをしようとしています:
QString string;
// do things...
std::cout << string << std::endl;
しかし、コードはコンパイルされません。qstringのコンテンツをコンソールに出力する方法(たとえば、デバッグ目的またはその他の理由)?に変換する方法QString
はstd::string
?
次を使用できます。
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
内部的にQString::toUtf8()関数を使用してstd :: stringを作成するため、Unicodeでも安全です。のリファレンスドキュメントは次のとおりですQString
。
QString
変換するときに覚えておくべきことの1つは、UTF-16でエンコードされstd::string
ているという事実です。QString
std::string
したがって、最良の方法は次のいずれかです。
QString qs;
// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();
// or this if you're on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();
コーデックを指定すると、推奨される(受け入れられる)方法が機能する場合があります。
最終的な目的がデバッグメッセージをコンソールに送信することである場合は、qDebug()を使用できます。
あなたはのように使うことができます、
qDebug()<<string;
これにより、コンテンツがコンソールに出力されます。
std::string
この方法は、メッセージをデバッグするためだけに変換するよりも優れています。
QString qstr;
std::string str = qstr.toStdString();
ただし、Qtを使用している場合:
QTextStream out(stdout);
out << qstr;
最善の方法は、operator <<を自分でオーバーロードして、出力可能な型を期待する任意のライブラリに型としてQStringを渡すことができるようにすることです。
std::ostream& operator<<(std::ostream& str, const QString& string) {
return str << string.toStdString();
}
提案されたものの代替案:
QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();
になり得る:
QString qs;
std::string current_locale_text = qPrintable(qs);
QtGlobalからconstchar*を提供するマクロであるqPrintableドキュメントを参照してください。
最も簡単な方法はですQString::toStdString()
。
これを使用できます。
QString data;
data.toStdString().c_str();
QString data;
data.toStdString().c_str();
~basic_string() _NOEXCEPT
{ // destroy the string
_Tidy_deallocate();
}
正しい方法(安全-例外なし)は、Artyomから上記で説明されている方法です
QString qs;
// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();
// or this if you're on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();
これを試して:
#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;