문자열을 Qstring으로 변경하는 방법?
문제
가장 기본적인 방법은 무엇입니까?
해결책
문자열로 당신은 의미합니다 std::string
이 방법으로 할 수 있습니다.
Qstring Qstring :: Fromstdstring (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
문자열로 ASCII가 인코딩된다는 것을 의미합니다 const char *
그런 다음이 방법을 사용할 수 있습니다.
Qstring Qstring :: FromAscii (const char * str, int size = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
당신이 가지고 있다면 const char *
읽을 수있는 시스템 인코딩으로 인코딩 qtextCodec :: CodeCForLocale () 그런 다음이 방법을 사용해야합니다.
Qstring QString :: Fromlocal8bit (const char * str, int size = -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 size = -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 * Unicode, int size = -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
a 정적 방법 변환하려면 std::string
a QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
대체 방법 :
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
이것은 사용하지 않는 이점이 있습니다 .c_str()
이로 인해 발생할 수 있습니다 std::string
추가 할 장소가없는 경우에 스스로 복사합니다. '\0'
결국.
std::string s = "Sambuca";
QString q = s.c_str();
경고: 이것은 작동하지 않습니다 std::string
포함 \0
에스.
답을 따를 때 문제가 있었기 때문에이 질문을 발견 했으므로 여기에 솔루션을 게시했습니다.
위의 예는 모두 ASCII 값 만 포함 된 문자열을 갖는 샘플을 보여 주며,이 경우 모든 것이 잘 작동합니다. 그러나 Windows에서 문자열을 다룰 때 Whcih는 독일 Umlauts와 같은 다른 문자를 포함 할 수 있습니다. 그러면 이러한 솔루션은 작동하지 않습니다.
그러한 경우에 올바른 결과를 제공하는 유일한 코드는
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
그러한 줄을 다룰 필요가 없다면 위의 답변은 잘 작동합니다.
또한 원하는 것을 변환하려면 QVARIART 클래스를 사용할 수 있습니다.
예를 들어:
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
당신은 c 문자열을 의미합니까? char*
문자열 또는 C ++ std::string
물체?
어느 쪽이든, 당신은 QT 참조에 문서화 된 것과 동일한 생성자를 사용합니다.
일반 C 문자열의 경우 기본 생성자 만 사용하십시오.
char name[] = "Stack Overflow";
QString qname(name);
a std::string
, 당신은 얻습니다 char*
버퍼에게 전달하십시오 QString
건설자:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());