我目前正在做一个更大的项目,其中“逻辑”是在标准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
指针解释为字符串的长度,并且