如何将字符串更改为QString?

时间:2009-11-28 23:56:58

标签: c++ string qt qstring

最基本的方法是什么?

6 个答案:

答案 0 :(得分:237)

如果使用STL兼容性编译,QStringstatic methodstd::string转换为QString

std::string str = "abc";
QString qstr = QString::fromStdString(str);

答案 1 :(得分:119)

如果用字符串表示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);

答案 2 :(得分:13)

替代方式:

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

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

答案 3 :(得分:10)

std::string s = "Sambuca";
QString q = s.c_str();

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

答案 4 :(得分:3)

我遇到了这个问题,因为我在回答问题时遇到了问题,所以我在这里发布我的解决方案。

以上示例都显示了包含仅包含ASCII值的字符串的示例,在这种情况下,一切正常。但是,当处理Windows中的字符串时,也可能包含其他字符,如德语变音符号,那么这些解决方案不起作用

在这种情况下,唯一能够提供正确结果的代码是

std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());

如果您不必处理此类字符串,则上述答案将正常运行。

答案 5 :(得分:0)

您是指C字符串,如char*字符串还是C ++ std::string对象?

无论哪种方式,您都使用相同的构造函数,如QT参考文档中所述:

对于常规C字符串,只需使用主构造函数:

char name[] = "Stack Overflow";
QString qname(name);

对于std::string,您获取缓冲区的char*并将其传递给QString构造函数:

std::string name2("Stack Overflow");
QString qname2(name2.c_str());