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

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

我知道我可以使用类似

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

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

如果有人能指出我正确的方向,我们将非常高兴。

最佳答案

如果Qt是使用与您的项目完全相同的STL header 编译的,则最好使用QString::fromStdWString 但使用(!!!)。如果没有,您会得到很多乐趣,发现了一个bug。

如果不确定两个STL header 是否相同,请使用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指针解释为字符串的长度,并且

07-28 01:26
查看更多