Qt字符串1

来源:互联网 发布:软件开发五个流程 编辑:程序博客网 时间:2024/06/06 03:54

c++有一套自己的字符串函数,在某些情况下足够使用了。在用Qt的过程中,Qt有自己的一套函数,来方便自己的操作。

我们常用的字符串一种是以“\0"结尾的字符数组,另一种就是c++中常见的string类。在Qt中提供了QString,他保存了16位的Unicode指,使用了隐式共享和高效的内存分配

,并且进行了大量的优化。

首先什么是隐式共享,具有隐式数据共享的对象,其赋值运算符使用的是浅拷贝来实现的。在我们操作共享数据时,实际有两种拷贝对象的方法:我们通常称其为深拷贝和浅拷贝。深拷贝意味着要重新构造一个全新的对象;浅拷贝则仅仅复制引用

字符串操作

Qt操作字符串

Qt的字符串可以通过"+"来组合两个字符串,并且使用”+=“这种方式将一个字符串追加在另一个字符串的后面,

QString str1="hello";

str1+="world";

QString str1="hello”向QString传递一个const char *型ASCII字符串,他被解释为c语言的字符串,即以"\0"结尾,,最后导致调用QString的构造函数,初始化一个QString字符串。

在Qt中也提供了一个函数QString::append()来追加字符串

除了以上的方法,Qt也提供了一种函数QString::arg(),他可以通过重载来处理很多类型的字符串,相对于QString::sprintf(),他更安全,完全支持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,从而得到的最后的结果

QString提供的其他字符串组合函数

1.insert();在原字符串特定位置插入字符

2.prepend();在原字符串开头插入字符

3.replace();用指定的字符串代替原字符串中的某些字符

4.QString::trimmed(),移除字符串两端的空白字符

5.QString::simplified();移除字符串两端的空白字符,使用单个空白字符代替出现的空白字符

eg:

QString str="    welcome \t to \n you     ";

str=str.trimmed();

在上述代码中,最后结果为" welcome \t to \n you "

如果使用simplified(),则最后结果为"welcome to you".

最后,补充一下深拷贝和浅拷贝:

深拷贝:

被复制对象会将所有非引用类型的字段复制给新对象,同时将引用类型所指向地址中存的对象复制给新的对象。

eg:

浅拷贝:

被复制对象的所有变量都含有与原来的对象相同的值,而其所有的对其他对象的引用都仍然指向原来的对象。

总结:

简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!



0 0
原创粉丝点击