011_Qt 中的字符串类

一、 历史遗留问题

1. C 语言不支持真正意义上的字符串
2. C 语言用字符数组和一组函数实现字符串操作
3. C 语言不支持指定类型,因此无法获得字符串类

二、 解决方案

1. 从 C 到 C++ 的进化过程引入了自定义类型
2. 在 C++ 中可以通过类完成字符串类型的定义

问1:C++ 中的原生类型系统是否包含字符串类型?
原生类型系统:这门语言自诞生时候起就拥有的数据类型的集合
答:没有,C++的原生类型系统可以说是几乎和 C 语言相同。所以说C++ 中的字符串类型必须得通过额外的自定义来得到。

问2:不同的人也就会定义不同的字符串类型,那么有没有标准的字符串类型可以使用呢?
答:标准库STL

三、 标准库 STL(Standard Template Library)

1. STL 是意义上需要与 C++ 一同发布的标准库
2. STL 是一套一模板技术完成的 C++ 类库
3. STL 中包含了常用的算法和数据结构
4. STL 中包含了字符串类

问:既然 STL 里面已经定义了字符串类了,那为什 Qt 里面还要定义字符串类?
答:
1. STL 的具体实现依赖于编译器生产厂商
2. STL 的"标准"只是其接口是标准的。也就是它有相同的全局函数;相同的算法类和数据结构类;相同的类成员函数。
3. 但是不同厂商的编译器所带的 STL 是存在差异的。依赖于 STL 开发的 C++ 程序在不同平台上的行为可能出现差异!!!

四、 开发前的选择

1、 项目是否需要使用现有库的支持?

    1. STL : 如果项目是使用 C++ 开发的,并且只在一个平台上使用。因为只在一个平台上面编译运行,只在一个平台上发布产品。
    2. Qt : 如果需要跨平台,那么 STL 也许就不能使用了。
    3. MFC : 如果只在 Windows 上进行开发,MFC也是一个非常好的选择。
    4. 私有库: 当然很多公司明令禁止不能使用 STL,很多公司有自己开发出来的一套库,因为不想依赖于其他公司的产品。

扩展知识区:C++ 没有专门所属的公司来开发、维护它,倒是有很多的开发 C++ 编译器的厂商,那么这些厂商都会对 C++ 这门语言做一些扩展,比如说:VC编译器和G++编译器,他们里面的C++的扩展就是不一样的,那既然C++语言都可以有所不同,STL有所不同那也就是非常正常的一件事情了。

2、 项目是否需要在不同平台间移植?

Android要去支持STL还有不少的工作要做,但是现在最新的Qt已经可以用来开发Android应用程序了

3、 项目是否需要图形用户界面?

项目在开发前,就要考虑这个项目是GUI应用程序,还是命令行应用程序,还是后台服务程序。STL 是不能开发图形用户界面的,因为STL不包含图形用户界面的类。

五、 Qt 中的字符串类

1. 采用 Unicode 编码

1. 它直接采用了Unicode编码,也就是说Qt中的字符串不仅仅支持英文,还直接支持中文、日文、韩文等等。
2. 而STL中的String类可能是因为诞生的比较早,所以是不支持Unicode编码的,它只支持ASCII编码。随着STL的发展,在STL里面就出现了WSting(W:Wide,宽字符)

2. 使用隐式共享技术来节省内存和不必要的数据拷贝

隐式共享技术:集合了深拷贝和浅拷贝的优点与一身的技术

3. 跨平台使用,不必考虑字符串的平台兼容性

六、 QSting VS string(STL)

七、 QString 基本操作示例(11-1)

Sample_1

Sample_2

Sample_3

八、 Qt 中的 QString

在开发应用程序的时候,我们绝大多数都是在和字符串类在打交道,QString 在 Qt库中几乎是无所不在的,所有的 Qt 图形用户组件都依赖与 QString

九、 编程实验(为计算器实例添加消息响应)

上节的消息处理函数

sender函数解析:发送消息的对象指针,它是 QObject 类的成员函数。在消息处理函数中调用 sender 函数将得到当前被点击的那个按钮的指针,有了这个指针,就可以获得按钮上显示的提示性字符串。

1. 修改消息处理函数(槽)--将点击的按钮信息显示在文本框上


输出信息

缺陷:在文本框上只能单纯的往后面添加字符,回退、撤销字符的功能都不能起到应用的作用效果

2. 对特殊的字符对应特殊的处理


输出信息

缺陷:能够撤销和回退,但是文本框对齐应该改为右对齐

改进地方:最后的等号运算还未实现。

十、 小结

  • 应用开发中大多数的情况都在进行字符串处理(所以字符串类对于我们的应用开发是至关重要的)
  • Qt 比 STL 更适合于跨平台开发的场景(Qt 中的 QString 比 STL 中 string 类更加强大易用)
  • Qt 图形用户组件都依赖于 QString
  • 在项目开发时需要综合各种选择需要的库

 

posted on 2020-06-30 17:11  wawzzll  阅读(270)  评论(0编辑  收藏  举报

导航