qt基础语法

ads

前言

上一节已经成功创建了一个Qt项目,接下来就是要在创建好的项目中,添加自己想要的功能。在写代码之前,我们需要掌握Qt的一些基础知识。

语法部分就不用讲了,这系列文章是对有C或C++语言基础的同学展开的,如果一点编程基础都没有的同学,也可以在后续实操文章中,跟着文章一点一点学习和积累语法知识。

和C/C++不同的是,Qt封装了一些自己的基本数据类型和方法。所以我们要想进行Qt编程,就要先掌握一些基本的数据类型,以及它们的使用方法,这在我们后续编程中会用到。

还有一点要说明的是,在Qt项目开发过程中,C++提供的数据类型还有一些系统函数都是可以使用的,只要包含对应的头文件就可以了。但是当我们在使用Qt提供的方法时,它的参数类型很多都是Qt的一些基本数据类型,所以我们还是要掌握的。

QByteArray

QByteArray是字符数组类,字节数组类是一个提供字节数组的类,它可以一位一位的访问数组中的字符。

它可以对应char*这个类去学习。QByteArrary这个类经常在串口通信中使用,因为串口通信数据都是一个一个的8位字节流,所以使用QByteArray就很方便。对于QByteArray的操作,主要需要掌握的操作有以下几种。

直接上代码:

初始化

QByteArray ba("Hello"); // "Hello"


QByteArray ba;ba.resize(5);ba[0] = 'H';ba[1] = 'e';ba[2] = 'l';ba[3] = 'l';ba[4] = 'o'; // "Hello"


QByteArray ba;ba.fill('O', 2);// "OO"//初始化时重点注意QByteArray的大小,和每一位的赋值。

访问某个元素

QByteArray ba("Hello");qDebug() << ba[0]; // "H"


qDebug() << ba.at(1); // "e"//访问某个元素时重点注意取得位数是否正确,第一位对应的值为0。

截取字符串

QByteArray x("Pineapple");QByteArray y = x.left(4);  // y=="Pine"


QByteArray y = x.right(5); // y=="apple"


QByteArray y = x.mid(4,3); // y=="app"QByteArray y = x.mid(4);   // y=="apple"//用mid方法从字符串中间截取时,第一个参数是起始位置,索引值从0开始;//第二个参数是截取的位数,如果不写第二个参数,就会一直截取到最后。

获取字节数组的大小

QByteArray ba("Hello");int n = ba.size();   // n==5int n = ba.length(); // n==5int n = ba.count();  // n==5//这三个方法除了名字不一样,其实是一样的。

转换为其他类型

//转intQByteArray strInt("1234");int n = strInt.toInt(); // n==1234
//转folotQByteArray strFloat("1234.56");float f = strFloat.toFloat(); // f==1234.56double d = strFloat.toDouble(); // d==1234.56
//转char*QByteArray ba("Hello world");char* data = ba.data();
//QByteArray与std::string互转QByteArray ba("Hello");std::string str = ba.toStdString(); // QByteArray转std::stringstd::string str("world");QByteArray ba = QByteArray::fromStdString(str); // std::string转QByteArray
//QByteArray与QString互转QString str = QString("hello world!");QByteArray arr = str.toLatinl(); // QString转QByteArrayQByteArray arr("abc123");QString str = arr; // QByteArray转QString

向前搜索和向后搜索

QByteArray ba("sticky question");int n = ba.indexOf("sti"); // n=0,默认从头搜索,返回sti出现的位置为0int n = ba.indexOf("sti", 1); // n=10,从第1位开始搜索,返回sti出现的位置为10
int n = ba.lastIndexOf("sti"); // n=10,默认从最后一位(-1)开始反向搜索,返回sti出现的位置为10int n = ba.lastIndexOf("sti", 9); // n=0,从第9位开始反向搜索,返回sti出现的位置为0

插入

QByteArray ba("Meal");ba.insert(1, QByteArray("ontr")); // ba=="Montreal"

QString

QString是字符串类,是一个很常用的数据类型。它可以对应string类型去理解,我们常用到的就是对QString的操作有以下几种。

直接上代码:

初始化及赋值

QString str("Hello");QString str = "Hello";

访问某个元素

QString str("Hello");QChar ch = str.at(4); // ch=='o'

获取长度

QString str("ni好");int n = str.count();  // n=3int n = str.size();   // n=3int n = str.length(); // n=3//这三个方法是相同的,都返回字符串中字符的个数,如果字符串中有汉字,一个汉字算一个字符。

字母大小写转换

QString str1 = "Hello,World";QString str2 = str1.toUpper(); //str2="HELLO,WORLD"QString str2 = str1.toLower(); //str2="hello,world"

移除字符

QString str = "hello,world";QString temp = str.remove(2, 4); //str="heworld"  temp="heworld"

添加字符串

QString str1 = "Hello", str2 = "world";QString str3 =str1;str1.append(str2);  // str1=="Helloworld"str3.prepend(str2); // str3=="worldHello"
QString str = QString("%1 was born in %2.").arg("Joy").arg(1993); //"Joy was born in 1993."//QString::arg()是一个很好的字符串组合方法,它可以处理很多种数据类型。//其中%1被替换为第一个arg()的参数,%2被替换为第二个arg()的参数。


去掉空格

QString str1 = " Are t you n OK? ",str2;str2 = str1.trimmed(); // str2=="Are t you n OK?" 去掉首尾空格str2 = str1.simplified(); //str2=="Are you OK?" 去掉首尾空格,中间连续的空格会用一个空格来替换

查找字符串

QString str1 = "sticky question";int n = str1.indexOf("sti"); // n=0,默认从头搜索,返回sti出现的位置为0int n = str1.indexOf("sti", 1); // n=10,从第1位开始搜索,返回sti出现的位置为10
int n = str1.lastIndexOf("sti"); // n=10,默认从最后一位(-1)开始反向搜索,返回sti出现的位置为10int n = str1.lastIndexOf("sti", 9); // n=0,从第9位开始反向搜索,返回sti出现的位置为0
int n = str1.find("sti", 0); // n=0,第二个参数表示位置index,如果index为0,从第一位开始找;//如果index为-1,从倒数第一位开始找;如果index为-2,从倒数第二位开始找。


判断字符串是否为空

QString str1, str2 = "";bool b = str1.isNull(); //b==true,未赋值字符串变量bool b = str2.isNull(); //b==false,只有“”的字符串也不是Nullbool b = str1.isEmpty();//b==truebool b = str2.isEmpty();//b==true

判断是否包含某个字符串

QString str1 = "Hello world";bool b = str1.contains("world"); // b==truebool b = str1.contains("WORLD", Qt::CaseInsensitive); // b==true,不区分大小写bool b = str1.contains("WORLD", Qt::CaseSensitive); // b==false,区分大小写

判断是否以某个字符串开头或结尾

QString str1 = "Hello, world!";bool b = str1.startsWith("HELLO", Qt::CaseInsensitive); // b==true,不区分大小写 bool b = str1.endsWith("WORLD!", Qt::CaseSenstive); // b==false,区分大小写

截取字符串

QString str1="姓名,男,1990-3-4,汉,南京", str2;int n = str1.indexOf(","); // n=2,第一个","出现的位置str2 = str1.left(n); // str2=="姓名"
int n = str1.lastIndexOf(","); // n=15,最后一个逗号出现的位置str2 = str1.right(str1.size()-n-1); // str2=="南京",提取最后一个逗号之后的字符串
QString x = "Nine apples";QString y = x.mid(5, 3); // y=="app"QString y = x.mid(5); // y=="apples"

将字符串转类型转换成其他基本数据类型

//转intQString strInt = "1234";int n = strInt.toInt(); // n==1234
//转folotQString strFloat = "1234.56";float f = strFloat.toFloat(); // f==1234.56double d = strFloat.toDouble(); // d==1234.56

字符串的比较

int n = QString::compare("def", "abc"); // n>0int n = QString::compare("abc", "def"); // n<0int n = QString::compare("abc", "abc"); // n=0

截断字符串

QString str1 = "Hello world";QString str2 = str1.truncate(1); // str2=="He",从位置1开始截断QString str2 = str1.chop(6); // str2=="Hello"截断最后6个字符

QStringList

QStringList是字符串列表类,是Qt容器类中的一种。其实是从QList<QString>继承来的,就是一个字符串类型的列表,因为这个类型使用比较频繁,所以封装成一个单独的类型来使用。我们经常用到这个类型的操作有以下几种。

QVector

QVector是Qt容器类中的一种。QVector是占用连续的内存控件存储给定类型的值的一个数组。QVector和QList容器中的数据都是一个接一个线性存储的,所以称为顺序容器。区别在于QList实质上是链表,QVector实质上是数组。所以在QVector前面或者中间插入项目是非常缓慢的,因为这样可能导致大量的项目在内存中移动一个位置。

我们可以对比std::vector去理解这个类。它是一种STL风格迭代器的容器类。我们经常用到的对QVector的一些操作主要有以下几种。

QMap

QMap也是容器类的一种,QMap的元素是由一对值组成的。第一个元素叫做Key,第二个元素叫做Value,Key和Value可以是两个不同的类型。

我们可以对比std::map去理解这个类。它也是一种STL风格迭代器的容器类。因为QMap元素组成的特殊性,所以经常用用到的操作有以下几种,最常用的是遍历和查找。


作者:黑兔子
链接:https://juejin.cn/post/7170613824876183565
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


最后编辑于:2024/1/17 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com