私はこのようなことをやろうとしています:
QString string;
// do things...
std::cout << string << std::endl;
しかし、コードはコンパイルされません。 qstringの内容をコンソールに出力する方法(デバッグなどの目的で) QString
をstd::string
に変換する方法?
QString
をstd::string
に変換するときに覚えておくべきことの1つは、QString
がUTF-16でエンコードされているのに対して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();
コーデックを指定した場合、提案された(受け入れられた)方法が機能する可能性があります。
あなたが使用することができます:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
こちらQString
のリファレンスドキュメント。
あなたの究極の目的がコンソールへのデバッグメッセージを取得することであるなら、あなたは 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からのconst char *を提供するマクロ qPrintable documentation を参照してください。
最も簡単な方法は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;