QLatin1String类的学习

本文讨论了Qt开发中遇到的字符串转换问题,特别是当程序中定义了QT_NO_CAST_FROM_ASCII时如何使用QLatin1String类进行高效转换。通过实例展示了在不同场景下使用QLatin1String类能显著提高程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久没看Qt,今天突然看了一下,因为看别人的代码,我自己想修改一下,发现只要用到字符串就会报错, 就连 QString str = “hello”; 也会报错,灰常的迷茫,后来查了一下才发现

在程序中定义了QT_NO_CAST_FROM_ASCII的应用程序是无法使用QString的const char*相关的API函数,因此Qt提供了QLatin1String类来更高效的利用const char*的类型,它就是一个关于const char*的一个浅封装。

只要在 .pro文件里面

DEFINES += \

    QT_NO_CAST_FROM_ASCII

char*就不能转换成QString,这时候就可以用 QLatin1String来代替在所有需要QString的地方。

下面是一篇译文:

QLatin1String类对US-ASCII/Latin-1编码的字符串进行了封装。

    许多QString的成员函数都用const char*代替QString作为参数实现重载。这包含拷贝构造函数,赋值操作,比较操作和其他不同的函数,比如insert(), replace(), indexOf(). 这些函数都做了优化以避免在函数调用时从const char*中构造一个QString对象。例如,假定str是QString对象,

  1. <span style="font-size:18px;"if (str == "auto" || str == "extern"  
  2.          || str == "static" || str == "register") {  
  3.      ...  
  4.  }</span>  
上面的代码执行会比下面的代码执行快很多
  1. <span style="font-size:18px;"if (str == QString("auto") || str == QString("extern")  
  2.          || str == QString("static") || str == QString("register")) {  
  3.      ...  
  4.  }</span>  
因为在第二部分的代码中会构造四个临时的QString对象,并复制字符串中的值。

    在程序中定义了QT_NO_CAST_FROM_ASCII的应用程序是无法使用QString的const char*相关的API函数,因此Qt提供了QLatin1String类来更高效的利用const char*的类型,它就是一个关于const char*的一个浅封装。如果利用QLatin1String类来写上述的程序就是

  1. <span style="font-size:18px;"if (str == QLatin1String("auto")  
  2.          || str == QLatin1String("extern")  
  3.          || str == QLatin1String("static")  
  4.          || str == QLatin1String("register") {  
  5.      ...  
  6.  }</span>  
虽然在代码输入的时候有点长,但是它的执行效率和上面第一段的代码一样,同时也比使用QString::fromLatin1()转换来的快。

    得益于QString(const QLatin1String&)这个构造函数,QLatin1String可以在任何需要QString对象的地方使用,比如:

  1. <span style="font-size:18px;">QLabel *label = new QLabel(QLatin1String("MOD"), this);</span> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值