Перетворити std :: string у QString


81

Мені std::string contentвідомо, що я знаю, що містить дані UTF-8. Я хочу перетворити його на QString. Як це зробити, уникаючи перетворення з-ASCII у Qt?

Відповіді:


92

Там є QStringфункція називається , fromUtf8що бере const char*:

QString str = QString::fromUtf8(content.c_str());

19
Більш ефективний:QString::fromUtf8( content.data(), content.size() )
Марк Муц - ммюц

2
У стандарті C ++ немає жодної гарантії, std::stringкодованої в UTF8 (насправді кодування не вказано), тому ця відповідь не зовсім правильна. Принаймні, вам слід перевірити кодування твердженням.
plasmacel

101

QString::fromStdString(content)краще, оскільки він більш надійний. Також зауважте, що якщо std::stringвін закодований в UTF-8, то він повинен дати точно такий же результат, як QString::fromUtf8(content.data(), int(content.size())).


4
Тільки в Qt5. У Qt4 він використовує QString :: fromAscii.
Ремі Бенуа

3
Це має бути прийнятою відповіддю. Однак ваше останнє твердження не обов'язково відповідає дійсності. У стандарті C ++ немає жодної гарантії, std::stringкодованої в UTF8 (насправді кодування не вказано), тому результати QString::fromUtf8(content.data(), int(content.size()))можуть бути різними (а також неправильними), ніж QString::fromStdString(content).
plasmacel

8

Зазвичай найкращий спосіб перетворення - використання методу з Utf8 , але проблема полягає в тому, що у вас є рядки, які залежать від мови.

У цих випадках переважно використовувати fromLocal8Bit . Приклад:

std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());

5

Оскільки Qt5 fromStdString внутрішньо використовує fromUtf8, тож ви можете використовувати обидва:

inline QString QString::fromStdString(const std::string& s) 
{
return fromUtf8(s.data(), int(s.size()));
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.