QT编程基础

2023-12-30 15:31:38

基本数据类型

在中

类型名称说明备注
qint8signed char有符号8位数据类型
qint16signed short有符号16位数据类型
qint32signed int有符号32位数据类型
qint64long long int有符号64位数据类型
quint8unsigned char无符号8位数据类型
quint16unsigned short无符号16位数据类型
quint32unsigned int无符号32位数据类型
quint64unsigned long long int无符号64位数据类型
qptrdiffptrdiff_t指针之间的差值
qrealdouble64位浮点数
qulonglongunsigned long long int无符号64位数据类型
quintptruintptr_t无符号整型,用于指针
ucharunsigned char无符号字符类型
uintunsigned int无符号整型
ulongunsigned long无符号长整型
ushortunsigned 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编码来表示一个字符。

文章来源:https://blog.csdn.net/beidideshu/article/details/135300588
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。