QT编程基础

基本数据类型

在中

类型名称 说明 备注
qint8 signed char 有符号8位数据类型
qint16 signed short 有符号16位数据类型
qint32 signed int 有符号32位数据类型
qint64 long long int 有符号64位数据类型
quint8 unsigned char 无符号8位数据类型
quint16 unsigned short 无符号16位数据类型
quint32 unsigned int 无符号32位数据类型
quint64 unsigned long long int 无符号64位数据类型
qptrdiff ptrdiff_t 指针之间的差值
qreal double 64位浮点数
qulonglong unsigned long long int 无符号64位数据类型
quintptr uintptr_t 无符号整型,用于指针
uchar unsigned char 无符号字符类型
uint unsigned int 无符号整型
ulong unsigned long 无符号长整型
ushort unsigned short 无符号短整型

字节数组类QByteArray

存储原始字节的,比char* 用着更方便,常在串口中使用。

初始化

  1. 输入const char*传给构造参数
QByteArray b("Hello"); 创建大小为5的字节数组对象,索引为04,实际大小还是6
最后'/0'结尾,有时候作为字符串结尾使用。、

QByteArray b("hello");
if(b[5]=='\0'){
	printf("b[5] is \0");
}

  1. 使用resize()设置数组大小
    QByteArray ba;
    ba.resize(6);
    ba[0] = 0x3c;
    ba[1] = 0xb8;
    ba[2] = 0x64;
    ba[3] = 0x18;
    ba[4] = 0xca;

QByteArray类使用从0开始的索引值,就像C++数组一样。在调用resize()后,新分配的字节具有未定义的值。要将所有字节设置为特定值,可以调用fill()函数,该函数的原型声明如下:
QByteArray &QByteArray::fill(char ch, int size = -1)

访问数组

  1. [] 可读可写
  2. at[] 可读可写
  3. data[] 仅可读
  4. constData[] 仅可读
    如果只是进行读操作,则通过at()和constData[]方式的访问速度最快,因为避免了复制处理。
    at()可以比operator 更快,就是因为前者不会发生深层复制。

截取子数组

  1. left
    函数left()返回从索引0位置开始、长度为len的子字节数组,该函数的原型声明如下:
    QByteArray left(int len)
    其中,参数len表示从数组左边开始要截取的字节数组的长度,如果len大于原来整个字节数组的长度,则返回整个字节数组。下列代码演示了函数left()函数的使用:
      QByteArray x("Pineapple");
      QByteArray y = x.left(4);
      // y == "Pine"

  1. right
    函数right()用来获取从字节数组最后一个字节数据开始,向前面截取len个字节并返回截取的子字节数组。该函数的原型声明如下:
    QByteArray right(int len)
    其中,参数len表示从右边开始要截取的子字节数组的长度,如果len大于原来整个字节数组的长度,则返回整个字节数组。下列代码演示了函数right()函数的使用:
    QByteArray x("Pineapple");
    QByteArray y = x.right(5);
    // y == "apple"

  1. mid
    函数mid()返回从指定索引位置开始,向右边(即后面)长度为len的子字节数组。该函数的原型声明如下:
    QByteArray mid(int pos, int len = -1)
    其中,参数pos表示开始截取的索引,索引值从0开始;len表示要截取的子字节数组的长度,如果len为-1(默认值)或pos+len大于原字节数组的长度,则返回从pos开始一直到右边剩下的全部字节数组。

获取字节数组的大小

可以用成员函数size、length和count来获取字节数组的大小。除了名字不同,这3个函数是等同的,函数的原型声明如下:

    int size();
    int length();
    int count();

数据转换与处理

  1. 16进制编码转化为字符类型 (“51” 转化为0x51),也就是字符16禁止转化为16进制数据。 两个字节转换为一个字节。字符16进制转化成数值16进制。
    QByteArray类的公有静态函数QByteArray::fromHex可以把十六进制编码的数据转换为字符(char)类型的数据,并存储到QByteArray类对象中。该函数的原型声明如下:
    QByteArray fromHex(const QByteArray &hexEncoded)

其中,参数hexEncoded是十六进制编码的字节数组。由于该函数并不检查参数的有效性,因此遇到非十六进制数据则直接略过,然后继续处理剩余的数据。
字符’5’和’1’为一组,转为十六进制数据0x51,0x51对应的十进制数据是81,ASCII码为81的字符是’Q’。

与fromHex()相逆的函数是toHex(),该函数将字节数组中十六进制的数值编码转化为字符。

数值转换为字符串数值类型字节数组(62转化成"63")

显示二进制和十六进制、显示科学记数和指定小数位的数值,QByteArray类的公有静态函数number可以完成这些功能。该函数可以将某个整数转为某种进制的字符数组,函数number的原型声明如下:
QByteArray number(int n, int base = 10)
其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36,即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。
与此公有静态函数功能类似的成员函数是setNum(),该函数也是将某个整数转为某种进制的字符数组,函数的原型声明如下:
QByteArray & setNum(int n, int base = 10)
其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36,即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。下列代码演示了setNum()函数的使用:

        QByteArray ba;
        int n = 63;
        ba.setNum(n);   // ba == "63"
        ba.setNum(n, 16);  // ba == "3f"

因为不是静态函数,所以要用对象来调用。

字母大小写转换

toUpper();
toLower();
isLower();
isUpper()

字符串数值转化为各类数值

to**

QByteArray与char*互转

成员函数data可以返回指向字节数组中存储数据的指针。该函数的原型声明如下:
char data();
该指针可用于访问和修改组成数组的元素。可以指定具体访问字节数组中的某一个,比如ba.data()[0]表示访问第0个。
如果要把char
转为QString,可以直接作为参数传入QByteArray类的构造函数中:

    char* pt;
    QByteArray byte(str);

QByteArray与std::string互转

string是C++标准库中的字符串类型。QByteArray类提供的成员函数toStdString()可以将字节数组转为string。该函数的原型声明如下:

std::string toStdString();

与该函数相反的函数是静态成员函数fromStdString(),它将string数据转为字节数组,该函数的原型声明如下:
[static] QByteArray QByteArray::fromStdString(const std::string &str);

其中,参数str是要转换的string字符串。函数返回转换后的字节数组。注意,转换的是str的一份备份,转换过程并不会影响str本身的内容。

与字符串QString互转

QByteArray与自定义结构体之间的转化

判断是否为空

可以使用函数isEmpty()来判断字节数组是否为空,即size是否为0。函数isEmpty()的原型声明如下:
bool isEmpty();
如果字节数组的size为0,则返回true,否则返回false。

向前搜索和向后搜索

indexof
lastindexof()

插入数据

函数insert()可以在某个索引位置上插入字节数组,该函数的原型声明如下:

    QByteArray & insert(int i, const QByteArray &ba);

prrpend() 开头插入

字符类Qchar(对unicode字符的封装)

QChar类是Qt中用于表示一个字符的类,实现在QtCore共享库中。QChar类的内部用两个字节的Unicode编码来表示一个字符。

你可能感兴趣的:(qt)