将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;
    ...
};
您拥有包含以下内容的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;
    ...
};
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调用
,结果将是相同的。