Qt编程基础:认识常用的基本类型
前言
上一节已经成功创建了一个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==5
int n = ba.length(); // n==5
int n = ba.count();// n==5
//这三个方法除了名字不一样,其实是一样的。
转换为其他类型
//转int
QByteArray strInt("1234");
int n = strInt.toInt(); // n==1234//转folot
QByteArray strFloat("1234.56");
float f = strFloat.toFloat(); // f==1234.56
double 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::string
std::string str("world");
QByteArray ba = QByteArray::fromStdString(str); // std::string转QByteArray//QByteArray与QString互转
QString str = QString("hello world!");
QByteArray arr = str.toLatinl(); // QString转QByteArray
QByteArray arr("abc123");
QString str = arr; // QByteArray转QString
向前搜索和向后搜索
QByteArray ba("sticky question");
int n = ba.indexOf("sti"); // n=0,默认从头搜索,返回sti出现的位置为0
int n = ba.indexOf("sti", 1); // n=10,从第1位开始搜索,返回sti出现的位置为10int n = ba.lastIndexOf("sti"); // n=10,默认从最后一位(-1)开始反向搜索,返回sti出现的位置为10
int 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=3
int n = str.size(); // n=3
int 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出现的位置为0
int n = str1.indexOf("sti", 1); // n=10,从第1位开始搜索,返回sti出现的位置为10int n = str1.lastIndexOf("sti"); // n=10,默认从最后一位(-1)开始反向搜索,返回sti出现的位置为10
int n = str1.lastIndexOf("sti", 9); // n=0,从第9位开始反向搜索,返回sti出现的位置为0int 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,只有“\0”的字符串也不是Null
bool b = str1.isEmpty();//b==true
bool b = str2.isEmpty();//b==true
判断是否包含某个字符串
QString str1 = "Hello world";
bool b = str1.contains("world"); // b==true
bool 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"
将字符串转类型转换成其他基本数据类型
//转int
QString strInt = "1234";
int n = strInt.toInt(); // n==1234//转folot
QString strFloat = "1234.56";
float f = strFloat.toFloat(); // f==1234.56
double d = strFloat.toDouble(); // d==1234.56
字符串的比较
int n = QString::compare("def", "abc"); // n>0
int n = QString::compare("abc", "def"); // n<0
int 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继承来的,就是一个字符串类型的列表,因为这个类型使用比较频繁,所以封装成一个单独的类型来使用。我们经常用到这个类型的操作有以下几种。
QVector
QVector是Qt容器类中的一种。QVector是占用连续的内存控件存储给定类型的值的一个数组。QVector和QList容器中的数据都是一个接一个线性存储的,所以称为顺序容器。区别在于QList实质上是链表,QVector实质上是数组。所以在QVector前面或者中间插入项目是非常缓慢的,因为这样可能导致大量的项目在内存中移动一个位置。
我们可以对比std::vector去理解这个类。它是一种STL风格迭代器的容器类。我们经常用到的对QVector的一些操作主要有以下几种。
QMap
QMap也是容器类的一种,QMap的元素是由一对值组成的。第一个元素叫做Key,第二个元素叫做Value,Key和Value可以是两个不同的类型。
我们可以对比std::map去理解这个类。它也是一种STL风格迭代器的容器类。因为QMap元素组成的特殊性,所以经常用用到的操作有以下几种,最常用的是遍历和查找。
最后
最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。
有需要的小伙伴,可以点击下方卡片领取,无偿分享
Qt编程基础:认识常用的基本类型相关推荐
- Arduino编程基础与常用函数(详细)解析
Arduino编程基础 关键字: if.if-else.for.switch.case.while.do-while.break.continue.return.goto. 语法符号:每条语句以&qu ...
- linux基础命令_Linux编程基础:常用命令
命令格式 在学习具体命令之前,需先了解Linux常用命令的基本格式.Linux系统中的命令遵循如下的基本格式: command [options] [arguments] 其中command表示命令的 ...
- Java编程基础(3)——字典类型
今天,要用到字典类型,所以就查了了一下,直接上源码: Individual indiv = new Individual(); //Individual是一个类,自己创建的,这里就不写具体内容了,只是 ...
- 【转】10.Qt编程涉及的术语和名词
本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字,它们不一定专属于 Qt,在其它的 C/C++ 开发过程中也会使用到. Project Project 的中文翻译是"项目" ...
- java基础案例教程第二章_第2章Java编程基础_补充案例教程.doc
第2章Java编程基础_补充案例教程 博学谷--让IT教学更简单,让IT学习更有效博学谷--让IT教学更简单,让IT学习更有效 PAGE \* MERGEFORMAT34PAGE \* MERGEFO ...
- QT开发(五十)——QT串口编程基础
QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要 ...
- python字符串实例_慢步学python,编程基础,字符串类型例子及输出
想了解python的安装及运行的可以看慢步之前写的文章. 今天继续python编程基础内容,字符串类型数据. python里面主要的数据类型是数值类型和字符串类型.计算机可以进行运算的是数值,字符串不 ...
- java中的常用名词,Java编程基础常见英语词汇
Java编程基础常见英语词汇 Java编程基础中常见英语的词汇有哪些呢?这些都是学Java编程需要运用到的,下面内容由小编为大家介绍Java编程基础常见英语词汇,供大家参考! Java编程基础常见英语 ...
- Shell编程基础常用代码1
Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...
最新文章
- JS同时上传表单图片和表单信息并把上传信息存入数据库,带php后端源码
- Plotly可视化输出数据表格(table):简单表格、添加链接的表格
- 英特尔将进行重大业务重组
- CentOS 6.7安装ZooKeeper 3.4.9
- golang beego 文件上传
- iTerm2 都不会用,还敢自称老司机?
- 【OpenCV学习笔记之一】图像加载,修改及保存
- 计算机视觉算法——图像分类网络总结
- 直流电机基本系统模型
- SAP document builder功能一览
- Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded
- ppt中覆盖原有图片文字并且添加新文字的操作方法,有截图
- 我的世界服务器公会系统,[娱乐|综合|RPG] [付费] Advanced Clans — 更好的公会系统 [1.8-1.15]...
- 第二次作业 项目质量管理重点知识梳理
- MATLAB遗传算法工具箱的函数及实例
- 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
- 微信小程序的一些开发限制
- R语言列联表的统计分析及假设检验
- Word插入页码简单方法
- 女孩起名字:100个优秀的女孩名字大全