将std::wstring转换为QString的最佳方法 我正在研究一个更大的项目,其中“逻辑”是在标准C++中实现的,所有字符串都是用“代码> STD::WScGe:/CODE处理的,UI部分是用Qt实现的,因此必须是代码> QStult(奖金问题:这是真的吗?)p>
连接这两个世界的最佳方式是什么 我知道我可以用像这样的东西将std::wstring转换为QString的最佳方法 我正在研究一个更大的项目,其中“逻辑”是在标准C++中实现的,所有字符串都是用“代码> STD::WScGe:/CODE处理的,UI部分是用Qt实现的,因此必须是代码> QStult(奖金问题:这是真的吗?)p>,c++,qt,qstring,wstring,C++,Qt,Qstring,Wstring,连接这两个世界的最佳方式是什么 我知道我可以用像这样的东西 std::wstring wideString; QString qtString = QString::fromStdWString(wideString); 但我想知道是否有一个更好的方法,少打字。我想到了一个用户定义的操作符,但我没有足够的经验独自解决这个问题 如果有人能给我指出正确的方向,我会很高兴。也许可以制作一个内联函数QString-toQString(std::wstring-string)来“减少输入” 但是说实话。
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
但我想知道是否有一个更好的方法,少打字。我想到了一个用户定义的操作符,但我没有足够的经验独自解决这个问题
如果有人能给我指出正确的方向,我会很高兴。也许可以制作一个内联函数
QString-toQString(std::wstring-string)
来“减少输入”
但是说实话。。。有时写这篇文章一点也不费劲;)
soo long zai我认为用户定义的转换是您需要的,从我收集的信息来看,它应该是这样的:
class foo
{
public:
operator QString(std::wstring& ws)
{
return QString::fromStdWString(ws);
}
}
最好使用
QString::fromStdWString
,但是如果Qt是使用与您的项目完全相同的STL头编译的话(!!!)。如果没有-你可以得到很多乐趣,捕捉一只虫子
如果不确定两个STL头是否相同,请使用QString::fromWCharArray
:
std::wstring wideString;
QString qtString = QString::fromWCharArray( wideString.c_str() );
更新:回复@juzzlin:让我们假设Qt是使用包含以下内容的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;
...
};
class wstring {
wchar_t * m_ptr;
wchar_t * m_the_end;
...
};
您拥有包含以下内容的STLstd::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;
...
};
class wstring {
wchar_t * m_ptr;
wchar_t * m_the_end;
...
};
如果将std::wstring
提供给Qt,它将m_end
指针解释为字符串的长度,并且
你可以得到很多乐趣,捕捉虫子
你读过吗?你已经接受了一个只描述了一个方向转换的答案。那是你的问题吗?然后,您可能应该修改标题,以避免误导(对于那些希望在另一个方向找到转换答案的人来说)。如果不使用“完全相同”的STL标题,会发生什么?那么为什么QString::fromWCharArray()是更好的解决方案呢?fromStdWString内联在QString.h中,并具有以下实现:
return fromWCharArray(s.data(),int(s.size())
所以,使用它是安全的。@rmflow是的,你是对的,但是不能保证wstring::data
和wstring::size
也是内联的。@borisbn这没关系,因为它们是从标头(在你的代码中)编译的。您可以从wchararray(s.data(),int(s.size())自己编写
而不是从stdwstring调用,结果将是相同的。