我目前正在开发一个更大的项目,其中“逻辑”在标准C ++中实现,所有字符串都使用std::wstring
处理,UI部分使用Qt实现,因此必须QString
(奖金问题:这是真的吗?)。
连接这两个世界的最佳方式是什么?
我知道我可以使用像
这样的东西std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
但我想知道是否有一种更好的方式,涉及更少的打字。一个用户定义的操作员出现在我的脑海中,但我没有足够的经验来解决这个问题。
如果有人能指出我正确的方向,我会很高兴。
答案 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