将std::wstring转换为QString的最佳方式
Best way to convert std::wstring to QString
我目前正在做一个更大的项目,其中"逻辑"是在标准C++中实现的,所有字符串都用std::wstring
处理,UI部分是用Qt实现的,因此必须是QString
(额外的问题:这是真的吗?)。
连接这两个世界的最佳方式是什么?
我知道我可以用之类的东西
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
但我想知道是否有一种更好的方法可以减少打字。我想到了一个用户定义的操作员,但我没有足够的经验来独自解决这个问题。
如果有人能给我指明正确的方向,我会很高兴。
使用QString::fromStdWString
是个好主意,但(!!)如果Qt是用与您的项目完全相同的STL头编译的。如果没有,你可以得到很多乐趣,捕捉一个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
指针解释为字符串的长度,并且
你可以得到很多乐趣,捕捉一个错误
我认为用户定义的转换就是你想要的,根据我所能收集到的,它应该是这样的:
class foo
{
public:
operator QString(std::wstring& ws)
{
return QString::fromStdWString(ws);
}
}
也许可以制作一个内联函数QString toQString(std::wstring string)
,使其"不太适合键入"。。。
但说实话。。。这根本不是一个大的努力,写它不时;)
soo long zai
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 将 Qvector<uint8_t> 转换为 QString
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 逐行读取QString的最佳方法
- 最佳地将窗口标题替换为新的 QString
- 从QString中删除前导零的最佳方式
- 将std::wstring转换为QString的最佳方式