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

时间:2013-02-06 10:07:32

标签: c++ qt qstring wstring

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

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

我知道我可以使用像

这样的东西
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);

但我想知道是否有一种更好的方式,涉及更少的打字。一个用户定义的操作员出现在我的脑海中,但我没有足够的经验来解决这个问题。

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

3 个答案:

答案 0 :(得分:18)

如果使用与项目完全相同的STL标头编译Qt,最好使用QString::fromStdWString (!!!)。如果没有 - 你可以获得很多乐趣,捕获一个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指针解释为字符串的长度,并且

  

你可以获得很多乐趣,捕获一个bug

答案 1 :(得分:2)

我认为用户定义的转换是您正在寻找的,而且从我可以收集的内容来看,它应该是这样的:

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

答案 2 :(得分:0)

可能会使内联函数QString toQString(std::wstring string)更难以输入...

但说实话......这不是一次不费力的写作;)

soo long zai