답변:
문자열로 말하면 std::string
이 방법으로 할 수 있음을 의미 합니다.
QString QString :: fromStdString (const 표준 :: 문자열 및 str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
문자열로 Ascii 인코딩 const char *
을 의미 하는 경우이 방법을 사용할 수 있습니다.
QString QString :: fromAscii (const char * str, int 크기 = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
당신이 경우 const char *
읽을 수 있습니다 시스템 인코딩으로 인코딩 QTextCodec :: codecForLocale () 당신은이 방법을 사용한다 :
QString QString :: fromLocal8Bit (const char * str, int 크기 = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
당신이있는 경우 const char *
의 UTF8 다음 인코딩 된 것으로이 방법을 사용해야합니다 :
QString QString :: fromUtf8 (const char * str, int 크기 = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
const ushort *
UTF16 인코딩 문자열 을 포함하는 방법도 있습니다 .
QString QString :: fromUtf16 (const ushort * 유니 코드, int 크기 = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
STL 호환성을 컴파일하는 경우, QString
가 정적 메서드 을 변환하는 std::string
A를을 QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
습니까? QString
전달 된 내용이 복사되는지 확실하지 않습니다 .
fromStdString
유지 .c_str
하지 않을 것입니다. (그리고이 질문에 나를 인도하는이 작업을 수행하는 방법을 정확하게이었다.)
다른 방법 :
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
이것은 끝에 추가 할 장소가없는 경우 자체를 복사 .c_str()
할 수있는 사용하지 않는 이점 이 있습니다 .std::string
'\0'
.c_str()
)
답변을 따를 때 문제가 발생 하여이 질문을 보았으므로 여기에 솔루션을 게시하십시오.
위의 예제는 모두 ASCII 값만 포함하는 문자열이있는 샘플을 보여줍니다.이 경우 모든 것이 제대로 작동합니다. 그러나 Windows에서 문자열을 처리 할 때 whcih는 독일어 움라우트와 같은 다른 문자를 포함 할 수 있습니다. 이러한 솔루션은 작동하지 않습니다
이러한 경우 올바른 결과를 제공하는 유일한 코드는
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
그러한 문자열을 다룰 필요가 없으면 위의 답변이 정상적으로 작동합니다.
fromLocal8Bit()
또한 원하는 것을 변환하기 위해 QVariant 클래스를 사용할 수 있습니다.
예를 들면 다음과 같습니다.
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
산출
"hello !"
"10"
"5.42"
5
char*
문자열이나 C ++ std::string
객체 에서와 같이 C 문자열을 의미 합니까?
어느 쪽이든 QT 참조에 설명 된 것과 동일한 생성자를 사용합니다.
일반 C 문자열의 경우 기본 생성자를 사용하십시오.
char name[] = "Stack Overflow";
QString qname(name);
의 경우 버퍼 std::string
를 가져 와서 생성자 char*
에게 전달합니다 QString
.
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
먼저 버퍼를 래퍼 한 다음 QString
생성자에 전달할 수 있습니다.