web-dev-qa-db-ja.com

QStringをstd :: stringに変換する方法

私はこのようなことをやろうとしています:

QString string;
// do things...
std::cout << string << std::endl;

しかし、コードはコンパイルされません。 qstringの内容をコンソールに出力する方法(デバッグなどの目的で) QStringstd::stringに変換する方法?

209
augustin

QStringstd::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();

コーデックを指定した場合、提案された(受け入れられた)方法が機能する可能性があります。

参照してください: http://doc.qt.io/qt-5/qstring.html#toLatin1

202
Artyom

あなたが使用することができます:

QString qs;
// do things
std::cout << qs.toStdString() << std::endl;

こちらQStringのリファレンスドキュメント。

248

あなたの究極の目的がコンソールへのデバッグメッセージを取得することであるなら、あなたは qDebug() を使うことができます。

あなたはのように使用することができます、

内容をコンソールに表示するqDebug()<<string;

この方法は、メッセージをデバッグするためだけにstd::stringに変換するよりも優れています。

35
liaK
QString qstr;
std::string str = qstr.toStdString();

しかし、Qtを使っているのなら:

QTextStream out(stdout);
out << qstr;
24
chris

行うべき最善のことはoperator <<自分自身をオーバーロードすることでしょう、それでQStringは出力可能な型を期待するどんなライブラリにも型として渡すことができます。

std::ostream& operator<<(std::ostream& str, const QString& string) {
    return str << string.toStdString();
}
17
Puppy

提案に代わるもの:

QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();

になり得る:

QString qs;
std::string current_locale_text = qPrintable(qs);

QtGlobalからのconst char *を提供するマクロ qPrintable documentation を参照してください。

12
flokk

最も簡単な方法はQString::toStdString()です。

8
shaveenk

これを使うことができます。

QString data;
data.toStdString().c_str();
 QString data;
   data.toStdString().c_str();

xstringでVS2017コンパイラでも例外をスローする可能性があります。

 ~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();
0
JPM

これを試して:

#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;
0
wudongliang