[c++] QString을 std :: string로 변환하는 방법?

나는 이런 식으로하려고합니다.

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

그러나 코드는 컴파일되지 않습니다. qstring의 내용을 콘솔에 출력하는 방법 (예 : 디버깅 목적 또는 기타 이유로)? 어떻게 변환하기 QStringstd::string?



답변

변환 할 때 기억해야 할 것들 중 하나 QString에이 std::string사실이다 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


답변

당신이 사용할 수있는:

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

내부적으로 QString :: toUtf8 () 함수를 사용하여 std :: string을 생성하므로 유니 코드도 안전합니다. 대한 참조 문서는 다음과 같습니다QString .


답변

궁극적 인 목표가 콘솔에 메시지를 디버깅하는 것이라면 qDebug ()를 사용할 수 있습니다 .

다음과 같이 사용할 수 있습니다.

qDebug()<<string;콘솔에 내용을 인쇄합니다 .

이 방법은 std::string디버깅 메시지를 위해 변환하는 것보다 낫습니다 .


답변

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

그러나 Qt를 사용하는 경우 :

QTextStream out(stdout);
out << qstr;


답변

가장 좋은 방법은 연산자 << 자신을 오버로드하여 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().