123-#重磅-QString-【深度扫盲】
本帖最后由 不二如是 于 2016-10-27 16:43 编辑来,再开始介绍前,先请你看下Qstring的官方文档、
感受下这个气势,就知道他有多牛x~
怎么说呢,他就像水和人的关系。
每个人都要喝,却不知道他有多么珍贵~
不扯远哈~
QString类提供了Unicode字符串。
好吧,我知道你要问不二:啥叫Unicode?
答:Unicode就是一种支持大部分文字系统的国际字符标准!
其实不管哪种编程语言:“Hello World”都会用到他。
并且在日常开发,QString无处不在,必须要知己知彼,深入的了解下哈{:10_278:}
不二从四个角度。
好好给你一件一件拨开,让你看到本质不过如此{:10_336:} ~
对了,这四个大标题,都是传送门,会把你领进我们四大当家头牌的闺房哈{:9_236:}
[*]隐式共享(Implicit Sharing)
QString存储了一串QChar,而QChar提供了一个16位的Unicode字符。
在后台运行中,QString使用隐式共享(impliccit sharing)来减少内存使用和避免不必要的数据拷贝
有助于减少存储16位字符串的内存开销。
一个共享类由一个 指向一个共享数据块的 指针和数据组成。
在共享数据块中包含了一个引用计数。
当一个共享对象被建立时,会设置引用计数为1,稍后程序会有演示哈~
当引用计数为0时,这个共享数据就会被销毁掉。
当处理共享对象时,有两种复制对象的方式:
看懂这个不二珍藏的gif,你就懂深和浅了{:10_336:}
[*]深拷贝(deep copy)
深拷贝意味着复制一个对象
代价非常昂贵,需要消耗很多内存和CPU资源。
当一个对象被修改时,必须要用深拷贝
[*]浅拷贝(shallow copy)
浅拷贝意味着复制一个引用(只是指向共享数据块的指针)
速度很快,因为他只需要设置一个指针和增加引用计数的值~
出现‘=’,例如,p2 = p1 就是一次浅拷贝。
共享的好处是程序不需要进行不必要的数据复制,可以减少数据的拷贝和使用更少的内存!
对象也容易被分配,或者作为参数被传递、返回。
隐式共享是在后台自动运行的,不必去关注他,但你一定要懂!
Qt主要的隐式共享有QByteArray、QCursor、QFont、QPixmap、QString、QUrl、QVariant和
所有的容器!
[*]编辑操作(Edit Operation)
QString提供了多个方便的函数来操作字符串
append()、prepend()分别实现了在字符串后面和前面添加字符串或者字符
replace()、insert()、remove()、trimmed()除去字符串两端空白字符。
simplified()不仅除去字符串两端的空白字符,还将字符串中间字符序列替换为一个空格
split()可以将一个字符串分割为多个字符串列表。
对于字符串是可以使用‘[ ]’来获取或者修改其中一个字符
‘+’组合两个字符。
null字符串和一个空字符串并不是完全一样。
一个null字符串是使用QString的默认构造函数或者在构造函数中传递了0来初始化的字符串。
而空字符串指大小为0的字符串。
null字符串是空字符串,但空字符串不一定是null字符串。
可以使用isEmpty()来判断哈~
[*]查询操作(Query Operation)
在QStrinh中还提供了rigth()、left()、mid()函数来提取一个字符串的最右面、左面、中间的含有多个字符串的子字符串。
indexOf()函数来获取一个字符串或者子字符串在该字符串中的位置。
at()函数获取一个指定位置的字符串。
at()比‘[ ]’要快很多,很简单不会使用深拷贝啦~
contains()判断该字符串是否包含一个指定的字符或者字符串。
count()来获得字符串一个字符或者子字符串出现的次数。
startsWith()和endsWidth()用来判断字符串是否是以一个字符或者字符串开始或者结束的,
‘>’'<='等进行两个字符串的比较。
当然了,compare()更可以用来比较字符串了!
[*]转换操作(.arg)
QString中toInt()、toDouble()等函数都是用来将字符串转换为整形或者double型数据。
当转换成功后,他们的第一个bool型参数会为true
使用静态函数number()可以将数值转换为字符串,但一定要指定转换为哪种进制。
toLower()、toUpper()分别返回字符串小写、大写形式的副本
arg()中的参数可以取代字符串中相应的‘%1’等标记。
在字符串可以使用的标记在1-99之间,arg()函数会从最小的数字开始对应。
QString(“%99,%5,%97”).arg("a").arg("b")
那么"a"会代替"%5","b"代替"%97","%99"则直接显示 。
arg()一种重载形式arg(const QString & a1,const QString & a2)
和str.arg(a1).arg(a2)是一样的~
QString类函数参数格式,在上面。
大概意思就是:
格式 含义
e 格式:[-]9,9e[+|-]999
E 格式:[-]9,9E[+|-]999
f 格式:[-]9,9
g 使用e或者f格式,选择其中最精简的
G 使用E或者f格式,选择其中最精简的
对于‘e’、‘E’、‘f’格式,精度precision表示小数点后面的位数
对于‘g’、‘G’格式,精度表示有效数字的最大位数。
arg()是一个非常有用的函数。
要在一个字符串中使用变量,那么使用arg()就是一种很好的选择!
qPrintable()函数,他不是QString中的函数,但可以使用这个函数,去掉最后输出的"引号"
toAscii()、toLation1()、toUtf8()、toLocal8Bit()等函数
都是使用一种编码将字符串转换为QByteArray()类型。
后面会介绍到QByteArray(),憋着急
{:10_266:}{:10_266:} 流月飞星 发表于 2016-10-28 22:42
{:10_257:} 基础学些什么语言可以开始学QT呢? lili200238 发表于 2016-11-1 18:32
基础学些什么语言可以开始学QT呢?
C++咯 不二如是 发表于 2016-11-1 21:27
C++咯
小甲鱼老师的“C++快速入门”快听完了,感觉完全没入门,怎么办吧???
{:7_119:}{:7_119:}{:7_119:} lili200238 发表于 2016-11-1 22:26
小甲鱼老师的“C++快速入门”快听完了,感觉完全没入门,怎么办吧???
那就不要快速入门喽
慢慢把概念过一篇,最基础,虽然好多大牛很瞧不上
但谭浩强老师的C++ ,比较简单。。。
{:5_91:} 谦虚求学 发表于 2016-11-6 13:47
{:9_237:} 支持楼主~~~ 我也正在学习PYQT5,但是找不到啥资源和案例,可以指条明路不{:10_250:}
页:
[1]