将 std::string 转换为 QString
Posted
技术标签:
【中文标题】将 std::string 转换为 QString【英文标题】:Convert std::string to QString 【发布时间】:2011-05-19 07:02:30 【问题描述】:我有一个 std::string content
,我知道它包含 UTF-8 数据。我想将其转换为QString
。我该怎么做,避免 Qt 中的 from-ASCII 转换?
【问题讨论】:
【参考方案1】:有一个名为fromUtf8
的QString
函数接受const char*
:
QString str = QString::fromUtf8(content.c_str());
【讨论】:
更高效:QString::fromUtf8( content.data(), content.size() )
在 C++ 标准中,不能保证 std::string
以 UTF8 编码(实际上未指定编码),所以这个答案并不完全正确。至少您应该通过断言检查编码。【参考方案2】:
QString::fromStdString(content)
更好,因为它更健壮。另请注意,如果 std::string
以 UTF-8 编码,那么它应该给出与 QString::fromUtf8(content.data(), int(content.size()))
完全相同的结果。
【讨论】:
仅在 Qt5 中。在 Qt4 中,它使用 QString::fromAscii。 这应该是公认的答案。但是,您的最后陈述不一定是正确的。在 C++ 标准中,不能保证std::string
以 UTF8 编码(实际上未指定编码),因此 QString::fromUtf8(content.data(), int(content.size()))
可能会给出与 QString::fromStdString(content)
不同(而且也不正确)的结果。【参考方案3】:
通常,进行转换的最佳方法是使用方法fromUtf8,但问题是当您的字符串依赖于语言环境时。
在这些情况下,最好使用fromLocal8Bit。示例:
std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
【讨论】:
【参考方案4】:由于 Qt5 fromStdString 内部使用 fromUtf8,所以你可以同时使用:
inline QString QString::fromStdString(const std::string& s)
return fromUtf8(s.data(), int(s.size()));
【讨论】:
以上是关于将 std::string 转换为 QString的主要内容,如果未能解决你的问题,请参考以下文章
QString, Std::string, char *相互转换
QString和std::string转换乱码与sqlite存储汉字乱码