鱼C论坛

 找回密码
 立即注册
查看: 6154|回复: 9

[技术原创] 123-#重磅-QString-【深度扫盲】

[复制链接]
发表于 2016-10-27 15:25:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2016-10-27 16:43 编辑

1.gif


来,再开始介绍前,先请你看下Qstring的官方文档、

感受下这个气势,就知道他有多牛x~

怎么说呢,他就像水和人的关系。

每个人都要喝,却不知道他有多么珍贵~


不扯远哈~

QString类提供了Unicode字符串。

好吧,我知道你要问不二:啥叫Unicode?

答:Unicode就是一种支持大部分文字系统的国际字符标准!

其实不管哪种编程语言:“Hello World”都会用到他。

并且在日常开发,QString无处不在,必须要知己知彼,深入的了解下哈

不二从个角度。

好好给你一件一件拨开,让你看到本质不过如此 ~


对了,这四个大标题,都是传送门,会把你领进我们四大当家头牌的闺房哈


  • 隐式共享(Implicit Sharing)


  • QString存储了一串QChar,而QChar提供了一个16位的Unicode字符。

    在后台运行中,QString使用隐式共享(impliccit sharing)来减少内存使用和避免不必要的数据拷贝

    有助于减少存储16位字符串的内存开销。

    一个共享类由一个 指向一个共享数据块的 指针和数据组成。

    在共享数据块中包含了一个引用计数。

    当一个共享对象被建立时,会设置引用计数为1,稍后程序会有演示哈~

    当引用计数为0时,这个共享数据就会被销毁掉。

    当处理共享对象时,有两种复制对象的方式:

    Value&Addres.gif

    看懂这个不二珍藏的gif,你就懂


    • 深拷贝(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)


  • 1.png


    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(),憋着急


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-28 22:42:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-29 08:47:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-1 18:32:07 | 显示全部楼层
基础学些什么语言可以开始学QT呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-1 21:27:55 | 显示全部楼层
lili200238 发表于 2016-11-1 18:32
基础学些什么语言可以开始学QT呢?

C++咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-1 22:26:32 | 显示全部楼层

小甲鱼老师的“C++快速入门”快听完了,感觉完全没入门,怎么办吧???

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-2 08:29:59 | 显示全部楼层
lili200238 发表于 2016-11-1 22:26
小甲鱼老师的“C++快速入门”快听完了,感觉完全没入门,怎么办吧???

那就不要快速入门喽

慢慢把概念过一篇,最基础,虽然好多大牛很瞧不上
但谭浩强老师的C++ ,比较简单。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 13:47:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-6 13:52:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-5 15:01:03 | 显示全部楼层
支持楼主~~~ 我也正在学习PYQT5,但是找不到啥资源和案例,可以指条明路不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 16:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表