QT学习笔记8(Qt常用类)

1、字符串类(QString类)

QString 存储字符串釆用的是16位 Unicode 码,每一个字符是一个 16 位的 QChar,而不是 8 位的 char,所以 QString 处理中文字符没有问题,而且一个汉字算作是一个字符。

QString在一个连续的内存块中保存字符串数据,当字符串的长度不断增长时,QString需要重新分配内存空间,以便足够的空间保存增加的字符串。

(1)操作字符串

     字符串的追加:

 QString str1="welcome ";
 str1 =str1+"to you!";
 ui->radiusLineEdit_2->setText(str1);

方法二:使用 append()函数

QString str1="welcome ";
QString str2="to you!";
str1.append(str2);
ui->radiusLineEdit_2->setText(str1);

QString其他的一些组合字符串方式:

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

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

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

(2)查询字符串

  //判断一个字符串是否一个某个字符串开头
    QString str1="welcome to you!";
    str1.startsWith("welcome",Qt::CaseSensitive);//第一个参数指定了一个字符串;第二个参数指定是否大小写敏感  返回true
    //判断一个字符串是否一个某个字符串结尾
    QString str1="welcome to you!";
    str1.endsWith("welcome",Qt::CaseSensitive);//第一个参数指定了一个字符串;第二个参数指定是否大小写敏感 (默认大小写敏感) 返回true

(3)字符串的转换数值

QString提供了丰富的转换函数,可以将一个字符串转换为数值类型或其他类型字符编码集。

    QString str1="125";
    bool ok;
    int hex=str1.toInt(&ok,16);//ok=true;hex=293 第一个参数是bool类型的指针,用于返回准换的状态,转换成功设置为true
    //第二个参数指定了转换的基数
    int dec=str1.toInt(&ok,10);//ok=true;dec=10

(4)数值转换成字符串

  int num=125;
    QString str=QString::number(num,10);//int转字符串
     ui->radiusLineEdit_2->setText(str);

2、容器类

        Qt提供了一组通用的基于模板的容器类。存在在Qt容器中的数据必须是可赋值的数据类型,这样的数据包含了通常使用的大多数数据类型。

        Qt不仅支持C++的STL模板库,同时自己也定义了一套容器类和与之操作的算法类,使用Qt定义的这一套库,可以使在各个平台的表现相同。Qt的这些容器被设计为更轻便,更安全和更容易使用。容器类是隐含共享(implicitly)的,可重入(reentrant)的和线程安全的。为容器遍历提供了两种迭代器(java-style,STL-style),并且Qt提供了foreach关键字,更加方便元素遍历。
(1)QList<T>

  • 这是最通用的一个容器类。它里面存储了给定类型T的一个列表,这个列表可以使用下标来访问。其实,在底层QList被实现为一个数组
  • 确保基于下标的访问非常快速。可以使用QList::append()和QList::prepend()向链表的两端添加元素,或者使用QList::insert()在链表的中间插入元素
  • ,和其他容器相比,更重要的是,QList在可执行文件中展开的代码量是非常少的,是经过高度优化的。QStringList就继承自QList<QString>。

(2)QLinkedList<T>

  • 这个容器类类似于QList,只能使用迭代器来访问它的数据项,而不能使用下标。当从中间插入时,它的效率比QList还要高。并且,它有更好的迭代器语义。
  • 即指向QLinkedList中某个元素的迭代器,只有该元素存在就会一直保持有效,而指向QList中某元素的迭代器,在向QList进行任意插入或删除时都会导致该迭代器失效。
  • QLinkedList<T>是一个链式列表,以非连续的内存块保存数据。

(3)QVector<T>

  • QVector<T>在相邻的内存中存储给定数据类型T的一组数值。在一个QVector<T>的前部或者中间位置插入操作是很慢的,这样的操作可以导致存储中的大量数据移动。
  • QVector<T>既可以使用下标访问数据项,也可以使用迭代器访问数据项。

3、迭代器:

迭代和遍历的区别:

  • 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
  • 遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。

迭代器为访问容器类里的数据项提供了统一的方法,Qt 有两种迭代器类:Java 类型的迭代器和 STL 类型的迭代器。

两者比较,Java 类型的迭代器更易于使用,且提供一些高级功能,而 STL 类型的迭代器效率更高。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值