20

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

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

我知道我可以使用类似的东西

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

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

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

4

3 回答 3

22

如果 Qt 使用与您的项目完全相同的 STL 头文件进行编译,那么使用它是一个好主意(!!!QString::fromStdWString 。如果没有 - 你可以得到很多乐趣,抓住一个错误。

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

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

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

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::wstringQt 交给 Qt,它会将m_the_end指针解释为字符串的长度,并且

你可以得到很多乐趣,抓住一个错误

于 2013-02-06T10:19:11.717 回答
2

我认为用户定义的转换是您正在寻找的,据我所知,它应该看起来像这样:

class foo
{
public:
   operator QString(std::wstring& ws)
   {
       return QString::fromStdWString(ws);
   }
}
于 2013-02-06T10:13:12.657 回答
0

也许制作一个内联函数QString toQString(std::wstring string)以使其“少打字”......

但老实说......不时写它根本不是很大的努力;)

苏龙仔

于 2013-02-06T10:11:06.187 回答