Qt类学习_QByteArrayClass

@QByteArrayClass

Header: #include <<QByteArray

详细的函数和变量看官方help文档

关于此类的详细描述:
此类提供了一个字节的数组。
QByteArray可以储存所有的的字节,包括’\0’和常规的8字节的以’\0’为结尾的字符串,使用QByteArray比使用 const char *更方便,这种情况下,它能保证数据后面由一个’\0’,并且使用隐式共享(copy-on-write)来降低空间的使用且不需要复制数据。
除了QByteArray之外,Qt还提供了QString类来储存数据,在大多数情况下,我们比较喜欢用QString,QString在Qt的API中是始终使用的,两个主要访问QByteAttay的情况时,当你需要储存二进制的数据和当数据需要保密的时候(比如在嵌入式中使用Qt)。
一种初始化QByteAttay的方式是在构造函数中添加一个const char *,举个例子,后面的代码创造了一个5位的字节数组,包含了数据"Hello"。

QByteArray ba("Hello");

尽管数组的大小是5,但是这个字节数组仍然在数组的后面包含一个额外的’\0’特征,于是一个函数使用了指向源数据的指针(比如a call to data()),数据指针将会在’\0’的时候终值。

QByteArray在使用const char * data的时候会进行一次深度共享,因此你可以在修改它的时候不用考虑任何副作用(如果处于性能的原因不想使用深度共享,请使用QByteArray::fromRawData());
另一种设置数组尺寸的方法是使用resize()并且一个字节一个字节的初始化这个数组,QByteArray像C++一样使用0作为起始索引,可以使用[]来方位特定的索引,在非常量的组数中,操作符[]返回这个字节的参考,可以用在一个参考的左边,举个例子

QByteArray ba;
  ba.resize(5);
  ba[0] = 0x3c;
  ba[1] = 0xb8;
  ba[2] = 0x64;
  ba[3] = 0x18;
  ba[4] = 0xca;

对于只读的数组,可以使用at()这个语法

for (int i = 0; i < ba.size(); ++i) {
      if (ba.at(i) >= 'a' && ba.at(i) <= 'f')
          cout << "Found character in range [a-f]" << endl;
  }

at()比操作符[]更快,因为它永远不会造成深度共享
为了在同一时间提取很多字节,使用 left(), right(), or mid().
一个QByteArray可以嵌入’\0’字节,size()函数尅返回整个数组的长度,包括嵌入的’\0’字节,但是在QByteArray的0的位置终结,举个例子:

  QByteArray ba1("ca\0r\0t");
  ba1.size();                     // Returns 2.
  ba1.constData();                // Returns "ca" with terminating \0.

  QByteArray ba2("ca\0r\0t", 3);
  ba2.size();                     // Returns 3.
  ba2.constData();                // Returns "ca\0" with terminating \0.

  QByteArray ba3("ca\0r\0t", 4);
  ba3.size();                     // Returns 4.
  ba3.constData();                // Returns "ca\0r" with terminating \0.

  const char cart[] = {'c', 'a', '\0', 'r', '\0', 't'};
  QByteArray ba4(QByteArray::fromRawData(cart, 6));
  ba4.size();                     // Returns 6.
  ba4.constData();                // Returns "ca\0r\0t" without terminating \0.

如果你想获得除第一个’\0’之外的数组的长度,可以使用qstrlen()在字节数组中。
在使用resize()以后,各个字节可以重新定义主句,如果想设置每一个字节为特殊额字节,请使用fill()函数。
为了获得当前的特征数据,使用data()或者constData()。这些函数返回一个指向起始字节的指针,这个指针在到达…

QByteAttay提供了如下基本的函数来修改字节数据: append(), prepend(), insert(), replace(), and remove(). For example:

  QByteArray x("and");
  x.prepend("rock ");         // x == "rock and"
  x.append(" roll");          // x == "rock and roll"
  x.replace(5, 3, "&");       // x == "rock & roll"
详细目录 1. 序 2. Qt 简介 3. Hello, world! 4. 信号槽 5. 自定义信号槽 6. Qt 模块简介 7. MainWindow 简介 8. 添加动作 9. 资源文件 10. 对象模型 11. 布局管理器 12. 菜单栏、工具栏和状态栏 13. 对话框简介 14. 对话框数据传递 15. 标准对话框 QMessageBox 16. 深入 Qt5 信号槽新语法 17. 文件对话框 18. 事件 19. 事件的接受与忽略 20. event() 21. 事件过滤器 22. 事件总结 23. 自定义事件 24. Qt 绘制系统简介 25. 画刷和画笔 26. 反走样 27. 渐变 28. 坐标系统 29. 绘制设备 30. Graphics View Framework 31. 贪吃蛇游戏(1) 32. 贪吃蛇游戏(2) 33. 贪吃蛇游戏(3) 34. 贪吃蛇游戏(4) 35. 文件 36. 二进制文件读写 37. 文本文件读写 38. 存储容器 39. 遍历容器 40. 隐式数据共享 41. model/view 架构 42. QListWidget、QTreeWidget 和 QTableWidget 43. QStringListModel 44. QFileSystemModel 45. 模型 46. 视图和委托 47. 视图选择 48. QSortFilterProxyModel 49. 自定义只读模型 50. 自定义可编辑模型 51. 布尔表达式树模型 52. 使用拖放 53. 自定义拖放数据 54. 剪贴板 55. 数据库操作 56. 使用模型操作数据库 57. 可视化显示数据库数据 58. 编辑数据库外键 59. 使用流处理 XML 60. 使用 DOM 处理 XML 61. 使用 SAX 处理 XML 62. 保存 XML 63. 使用 QJson 处理 JSON 64. 使用 QJsonDocument 处理 JSON 65. 访问网络(1) 66. 访问网络(2) 67. 访问网络(3) 68. 访问网络(4) 69. 进程 70. 进程间通信 71. 线程简介 72. 线程和事件循环 73. Qt 线程相关 74. 线程和 QObject 75. 线程总结 76. QML 和 QtQuick 2 77. QML 语法 78. QML 基本元素 79. QML 组件 80. 定位器 81. 元素布局 82. 输入元素 其他文章 宏定义中的 do {…} while (0) C++:在堆上创建对象,还是在栈上?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值