sth*_*sth 242

如果使用STL兼容性编译,则QString有一个静态方法将a转换std::stringQString:

std::string str = "abc";
QString qstr = QString::fromStdString(str);
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这实际上应该避免.如果编译的标准库QT的版本与您编译的版本有所不同,那么您将遇到麻烦.In在QT中存在QT和libstdc ++之间不必要的依赖关系. (3认同)

Kam*_*zot 130

如果是字符串,则表示std::string您可以使用此方法执行此操作:

QString QString :: fromStdString(const std :: string&str)

std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Run Code Online (Sandbox Code Playgroud)

如果用字符串表示Ascii编码,const char *那么你可以使用这个方法:

QString QString :: fromAscii(con​​st char*str,int size = -1)

const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Run Code Online (Sandbox Code Playgroud)

如果您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);
Run Code Online (Sandbox Code Playgroud)

如果你有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);
Run Code Online (Sandbox Code Playgroud)

还有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);
Run Code Online (Sandbox Code Playgroud)

  • 似乎现在已经修复了,而且非常好,所以我给了这个和另一个+1. (3认同)

sho*_*osh 13

替代方式:

std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Run Code Online (Sandbox Code Playgroud)

这样做的好处是不使用.c_str()哪个可能导致std::string复制自身,以防'\0'在最后没有地方添加.

  • 感谢有关使用.c_str()的潜在隐藏副本的提示. (2认同)

wil*_*ell 10

std::string s = "Sambuca";
QString q = s.c_str();
Run Code Online (Sandbox Code Playgroud)

警告:如果std::string包含\0s,则无效.