如何将字符串转换为QString?
最基本的方法是什么?
What is the most basic way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
最基本的方法是什么?
What is the most basic way to do it?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
如果使用 STL 兼容性进行编译,
QString
具有静态方法< /a> 将std::string
转换为QString
:If compiled with STL compatibility,
QString
has a static method to convert astd::string
to aQString
:如果您所说的字符串是
std::string
您可以使用以下方法来实现:QString QString::fromStdString(const std::string & str)
如果你所说的字符串是指 Ascii 编码的
const char *
那么你可以使用这个方法:QString QString::fromAscii(const char * str, int size = -1)
如果您有使用系统编码进行编码的
const char *
,可以使用 QTextCodec::codecForLocale() 那么你应该使用这个方法:QString QString::fromLocal8Bit(const char * str, int size = -1)
如果您有 UTF8 编码的
const char *
那么您需要使用此方法:QString QString::fromUtf8(const char * str, int size = -1)
还有包含 UTF16 编码字符串的
const ushort *
方法:QString QString::fromUtf16(const ushort * unicode, int size = -1)
If by string you mean
std::string
you can do it with this method:QString QString::fromStdString(const std::string & str)
If by string you mean Ascii encoded
const char *
then you can use this method:QString QString::fromAscii(const char * str, int size = -1)
If you have
const char *
encoded with system encoding that can be read with QTextCodec::codecForLocale() then you should use this method:QString QString::fromLocal8Bit(const char * str, int size = -1)
If you have
const char *
that's UTF8 encoded then you'll need to use this method:QString QString::fromUtf8(const char * str, int size = -1)
There's also method for
const ushort *
containing UTF16 encoded string:QString QString::fromUtf16(const ushort * unicode, int size = -1)
替代方法:
这样做的优点是不使用
.c_str()
,这可能会导致std::string
复制自身,以防没有地方添加>'\0'
位于末尾。Alternative way:
This has the advantage of not using
.c_str()
which might cause thestd::string
to copy itself in case there is no place to add the'\0'
at the end.警告:如果
std::string
包含\0
,则此方法将不起作用。Warning: This won't work if the
std::string
contains\0
s.我遇到这个问题是因为我在遵循答案时遇到了问题,所以我在这里发布我的解决方案。
上面的示例都显示了仅包含 ASCII 值的字符串的示例,在这种情况下一切正常。但是,当在 Windows 中处理字符串时,其中还可以包含其他字符,例如德语变音符号,那么这些解决方案不起作用
在这种情况下给出正确结果的唯一代码是
如果您不必处理此类字符串,那么上面的答案会很好地工作。
I came across this question because I had a problem when following the answers, so I post my solution here.
The above examples all show samples with strings containing only ASCII values, in which case everything works fine. However, when dealing with strings in Windows whcih can also contain other characters, like german umlauts, then these solutions don't work
The only code that gives correct results in such cases is
If you don't have to deal with such strings, then the above answers will work fine.
您是指 C 字符串(如
char*
字符串)还是 C++std::string
对象?无论哪种方式,您都使用相同的构造函数,如 QT 参考中所述:
对于常规 C 字符串,只需使用主构造函数:
对于
std::string
,您可以获取缓冲区的char*
并将其传递给 <代码>QString构造函数:Do you mean a C string, as in a
char*
string, or a C++std::string
object?Either way, you use the same constructor, as documented in the QT reference:
For a regular C string, just use the main constructor:
For a
std::string
, you obtain thechar*
to the buffer and pass that to theQString
constructor:此外,要转换您想要的任何内容,您可以使用 QVariant 类。
例如:
输出
Moreover, to convert whatever you want, you can use the QVariant class.
for example:
output