Qt5模板库、工具类及控件

HuRui 发布于 2017/11/10 15:59
查看:705|回复:2

       第2章 -- Qt5模板库、工具类及控件      --- 2017.11.9 

简单介绍Qt字符串类QString、Qt容器类、QVariant类及Qt常用的算法和基本正则表达式


2.1字符串类             

   标准C++提供了两种字符串:一种是C语言风格的以“\0”字符结尾的字符数组;另一种是字符串类String,而Qt字符串类QString功能更强大。

   QString类保存16位Unicode值,提供了丰富的操作、查询和转换等函数。该类还进行了使用隐式共享(implicit sharing)、高效的内存分配策略等方面的优化。


2.1.1操作字符串    

   字符串有如下几个操作符

   (1)QString提供了一个二元的“+”操作符用于组合两个字符串,并提供了一个“+=”操作符用于将一个字符串追加到另一个字符串的末尾,例如:

    QString str1 = "Welcome";

    str1=str1+"to you!";                //str1="Welcome to you!"

    QString str2 = "Hello,";

    str2+="World";                      //str2="Hello,World!"

    

   其中,QString str1 = "Welcome"传递给QString一个const char*类型的ASCII字符串“Welcome”,它被解释为一个典型的“\0”结尾的C类型字符串。这将会导致调用QString构造函数,来初始化一个QString字符串。其构造函数原型为:

  QT_ASCII_CAST_WARN_CONSTRUCTOR QString::QString(const char* str)

  被传递的const char*类型的指针又将被函数QString::fromAscii()转换为Unicode编码。默认情况下,函数QString::fromAscii()会江超过128的字符作为Latin-1进行处理(可以通过调用QTextCode::setCodeForCString()),函数改变QString::fromAscii()函数的处理方式)

  此外,在编译应用程序时,也可以通过定义QT_CAST_FROM_ASCII宏变量屏蔽该构造函数。如果程序员要求显示给用户的字符串都必须经过QObject::tr()函数的处理,那么屏蔽QString的这个构造函数是非常有用的。

  (2)QString::append()函数具有与“+=”操作符同样的功能,实现在一个字符串的末尾追加另一个字符串,

  例如:

  QString str1 = "Welcome";

  QString str2 = "to";

  str1.append(str2);              //str1="Welcome to"

  str1.append("you!");            //str1="Welcome to you!"

  (3)组合字符串的另一个函数是QString::sprintf(),此函数支持的格式定义符和C++库中的函数sprintf()定义一样。 例如:

  QString str;

  str.sprintf("%s"," Welcome ");                         //str="Welcome"

  str.sprintf("%s"," to you! ");                         //str="to you!"

  str.sprintf("%s %s","Welcome","to you!");              //str="Welcome to you!"

  (4)Qt还提供了另一种方便的字符串组合方式,使用QString::arg()函数,此函数的重载可以处理很多的数据类型,此外,一些重载具有额外的参数对字段的宽度、数字基数或者浮点数精度进行控制。通常,相对于函数QString::sprintf(),函数QString::arg()是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变"%/n"参数的顺序,例如:

  QString str;

  str=QString("%1 was born in %2.").arg("John").arg(1982);     

  //str="John was born in 1982."

  其中,"%1"被替换为"John","%2"被替换为"1982"

  (5)QString也提供了一些其他组合字符串的方法,包括以下几种:

   1>insert()函数: 在原字符串特定的位置插入另一个字符串。

   2>prepend()函数:在原字符串的开头插入另一个字符串。

   3>replace()函数:用指定的字符串代替原字符串中的某些字符。

  (6)很多时候,去掉一个字符串两端的空白(空白字符包括回车字符"\n"、换行字符"\r"、制表符"\t"和空格符“”等)非常有用,如获取用户输入的账号时。

   1>QString::trimmed()函数:移除字符串两端的空白字符

   2>QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“”代替字符中出现的空白字符,例如:

   QString str = "Welcome \t to \n you! ";

   str=str.trimmed();                     //str="Welcome \t to \n you! "

   在上述代码中,如果使用str=str.simplified(),则str的结果是"Welcome to you!"

                           ca7a28a1558e160adee44663b4412fdc003.gif

             - - - - - - - -  害你加班的bug,就是我写的! - - - - - - - - - 

查看点赞情况
全部点赞
总计: --

共有2条评论

发布新贴
招版主啦

版主

  • 西米酱 西米酱
  • xly xly
  • 章鱼哥笔记 章鱼哥笔记

注册有礼

完善以下信息,为你推荐课程

  • 学生
  • 白领
  • 高管
  • 自由职业
  • 其他
  • 工作需要
  • 自我提升
  • 兴趣爱好
  • 创业/转型
  • 其他
  • 小白
  • 了解
  • 熟悉
  • 精通
  • 其他
  • 高中/中专
  • 专科
  • 本科
  • 硕士
  • 其他
  • 影视枪战大片特效解析
  • PS视觉惊悚课堂
  • 45天7千平方大厦变形记
  • 原画学习痛点技法全解析
  • 影视动画奇幻课堂
  • AI高端商业设计全攻略
  • UG职场生存必备指南
  • 日赚千元之新媒体行业揭秘
出现异常