202


44

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

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

QString string;
// do things...
std::cout << string << std::endl;
しかし、コードはコンパイルされません。 qstringの内容をコンソールに出力する方法(例: デバッグ目的またはその他の理由で)? 「QString」を「std

string」に変換する方法は?

10 Answer


237


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

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

Here’s `QString`のリファレンスドキュメント。


197


QString`を std

string`に変換する際に覚えておくべきことの1つは、 std :: string`の間に QString`がUTF-16エンコードされているという事実です…​ 任意のエンコーディングを使用できます。

したがって、最善の方法は次のいずれかです。

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


33


最終的な目的がコンソールへのデバッグメッセージの取得である場合は、http://doc.qt.io/qt-5/qdebug.html [qDebug()]を使用できます。

次のように使用できます

`qDebug()<はコンテンツをコンソールに出力します。 `

この方法は、メッセージをデバッグするためだけに `std

string`に変換するよりも優れています。


23


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

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

QTextStream out(stdout);
out << qstr;


17


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

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


10


提案の代替:

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

になり得る:

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

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


7


最も簡単な方法は、 `QString

toStdString()`です。


2


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

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


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


0


これを試して:

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