将std::wstring转换为QString的最佳方式

Best way to convert std::wstring to QString

本文关键字:最佳 QString 方式 转换 std wstring      更新时间:2023-10-16

我目前正在做一个更大的项目,其中"逻辑"是在标准C++中实现的,所有字符串都用std::wstring处理,UI部分是用Qt实现的,因此必须是QString(额外的问题:这是真的吗?)。

连接这两个世界的最佳方式是什么?

我知道我可以用之类的东西

std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);

但我想知道是否有一种更好的方法可以减少打字。我想到了一个用户定义的操作员,但我没有足够的经验来独自解决这个问题。

如果有人能给我指明正确的方向,我会很高兴。

使用QString::fromStdWString是个好主意,但(!!)如果Qt是用与您的项目完全相同的STL头编译的。如果没有,你可以得到很多乐趣,捕捉一个bug。

如果您不确定两个STL头是否相同,请使用QString::fromWCharArray:

std::wstring wideString;
QString qtString = QString::fromWCharArray( wideString.c_str() );

更新:回复@juzzlin:
让我们想象一下,Qt是用包含以下std::wstring:的STL构建的

class wstring { // I know, that there's no such class, but I'm shure you'll understand what I want to say
    wchar_t * m_ptr;
    size_t m_length;
    ...
};

并且STL包含以下std::wstring:

class wstring {
    wchar_t * m_ptr;
    wchar_t * m_the_end;
    ...
};

如果您将std::wstring赋给Qt,它将把m_the_end指针解释为字符串的长度,并且

你可以得到很多乐趣,捕捉一个错误

我认为用户定义的转换就是你想要的,根据我所能收集到的,它应该是这样的:

class foo
{
public:
   operator QString(std::wstring& ws)
   {
       return QString::fromStdWString(ws);
   }
}

也许可以制作一个内联函数QString toQString(std::wstring string),使其"不太适合键入"。。。

但说实话。。。这根本不是一个大的努力,写它不时;)

soo long zai