나는 이런 식으로하려고합니다.
QString string;
// do things...
std::cout << string << std::endl;
그러나 코드는 컴파일되지 않습니다. qstring의 내용을 콘솔에 출력하는 방법 (예 : 디버깅 목적 또는 기타 이유로)? 어떻게 변환하기 QString
에 std::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()
.