QT中 QString转化为String时候的toStdString与toLocal8Bit 的区别

今天修改项目的时候发现一个问题,在读取路径的时候,当用到toStdString的时候,程序加载不出来路径所指定的位置,但是用到toLocal8Bit的时候,系统就可以加载出来路径所指定的位置:

例如:

OpenSP::sp<INavigationPathContainer> m_pNavigationPathContainer;

当用到toStdString的时候:

m_pNavigationPathContainer->saveToFile(m_kflPath.toStdString());

这样是加载不出来路径的;

当用到toLocal8Bit的时候:

m_pNavigationPathContainer->saveToFile(std::string((const char *)m_kflPath.toLocal8Bit()));

这样是可以加载出来路径的;



另外对于QString转化为String的时候,有时候用toStdString没有任何问题,但是用到toLocal8Bit的时候就会出现乱码:

例如:

OpenSP::sp<IUtility> m_pUtility;

OpenSP::sp<INavigationKeyframe> pFrame = m_pUtility->createNavigationKeyframe();

当用到toStdString的时候:

pFrame->setName(strFrameName.toStdString());

这样是没有任何问题的;

当用到toLocal8Bit的时候:

pFrame->setName(std::string((const char *)strFrameName.toLocal8Bit()));

这样是会出现乱码的;



具体什么原因我也不是很清楚,希望看到的人,如果会的话,请不吝赐教,谢谢了!









  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Q:b'qt\xe4\xb8\xadqstring\xe4\xb8\x8estring\xe7\x9a\x84\xe5\x8c\xba\xe5\x88\xab'。 A:qtQStringstring不同。 QStringQt框架QString类,是一个Unicode字符串类,支持很多字符串操作,例如查找、替换、大小写转换等。 而string是C++语言的标准库的一个字符串类,被定义在头文件,是用来存储和操作字符串的类。 总之,这两个类有不同的实现和用法,需要根据具体要求选择适当的类来使用。 ### 回答2: Qt是一款跨平台的C++应用程序框架,它为开发者提供了一套丰富的功能库,其包括QString类。QStringQt常用的一个字符串类,与C++标准库string类有些不同。下面就让我们来一起了解一下QStringstring区别。 1. 字符编码 QString的字符编码是Unicode,支持UTF-16和UTF-8两种编码。而string的字符编码则是由平台所决定的,在Windows平台上一般为ANSI编码,而在Unix平台上一般为UTF-8编码。因此,如果需要处理文字符等特殊字符,使用QString类会更方便。 2. 内存管理 QString类是动态分配内存的,可以自动调整内存大小以适应字符串长度的变化。而string类则是静态分配内存的,需要手动管理内存。这意味着在使用QString时,我们无需担心内存溢出或其他内存问题,而在使用string时,我们需要更加谨慎地处理内存。 3. 字符串拼接 在QString,我们可以使用"+"符号进行字符串拼接。而在string,需要使用库函数strcat()或者operator+=进行字符串拼接。因此,QString的字符串拼接更加直观和方便。 4. 字符串查找 QString提供了indexOf()和lastIndexOf()函数,可以用于查找字符串的子串。而string则需要使用find()函数进行字符串查找。因此,在处理字符串查找时,使用QString会更加方便。 综上所述,QStringstring类都有其自己的特点和应用场景。在Qt开发,建议优先使用QString类,以便更好地充分利用Qt框架和其提供的字符串处理函数。 ### 回答3: Qt是一种流行的跨平台开发框架,它已经成为许多企业和开发者的首选。Qt有一个非常重要的类:QString,它是Qt的字符串类。相较于C++标准库stringQString有许多优势。 首先,QString是一种Unicode字符串,支持全世界范围内的字符。而C++标准库string只支持ISO Latin-1字符集。所以,QString更适用于开发涉及到国际化的软件,因为它能够处理各种不同字符集的字符串。 其次,QString是可动态调整的。C++标准库string有一定的大小限制,它们的大小在使用前必须确定,无法改变。而QString的大小是可以根据需要动态增加或减少的,这使得它更灵活、更适应实际需要。 另外,QString具有自动内存管理功能,使得QString对象的创建和销毁变得更加简单和方便。而C++标准库string不自动管理内存,需要手动进行管理。 最后,QString文支持更友好。文属于多字节字符,如果使用C++标准库string时,可能会出现乱码等问题。在QString文字符可以正常显示。这是在国内开发尤为重要,因为许多应用程序需要在国大陆、香港、台湾和其他地方进行本地化。 总之,QString相较于C++标准库string,有更广泛的字符集支持、更动态的大小、更简单的内存管理和更友好的文支持。因此,对于使用Qt框架的开发者来说,QString是一个更好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值