将 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】:

有一个名为fromUtf8QString 函数接受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存储汉字乱码

QString和std::string转换乱码与sqlite存储汉字乱码

pyqt4的编码问题Qstring怎么转换为string

QString与std::string的相互转换

QString与std::string 有中文时的转换操作