267

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

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

しかし、コードはコンパイルされません。qstringのコンテンツをコンソールに出力する方法(たとえば、デバッグ目的またはその他の理由)?に変換する方法QStringstd::string

4

10 に答える 10

316

次を使用できます。

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

内部的にQString::toUtf8()関数を使用してstd :: stringを作成するため、Unicodeでも安全です。リファレンスドキュメントは次のとおりですQString

于 2010-11-18T11:48:01.820 に答える
244

QString変換するときに覚えておくべきことの1つは、UTF-16でエンコードされstd::stringているという事実です。QStringstd::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

于 2011-01-10T08:36:31.633 に答える
36

最終的な目的がデバッグメッセージをコンソールに送信することである場合は、qDebug()を使用できます。

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

qDebug()<<string;これにより、コンテンツがコンソールに出力されます。

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

于 2010-11-18T12:12:32.527 に答える
25
QString qstr;
std::string str = qstr.toStdString();

ただし、Qtを使用している場合:

QTextStream out(stdout);
out << qstr;
于 2010-11-18T11:52:43.720 に答える
18

最善の方法は、operator <<を自分でオーバーロードして、出力可能な型を期待する任意のライブラリに型としてQStringを渡すことができるようにすることです。

std::ostream& operator<<(std::ostream& str, const QString& string) {
    return str << string.toStdString();
}
于 2010-11-18T12:02:57.467 に答える
12

提案されたものの代替案:

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

になり得る:

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

QtGlobalからconstchar*を提供するマクロであるqPrintableドキュメントを参照してください。

于 2012-09-06T12:09:03.063 に答える
8

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

于 2013-08-02T13:21:08.270 に答える
2

これを使用できます。

QString data;
data.toStdString().c_str();
于 2017-01-27T12:06:02.710 に答える
0
 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();
于 2018-08-03T16:54:05.063 に答える
-2

これを試して:

#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;
于 2018-12-12T02:09:08.927 に答える