前言

上一节已经成功创建了一个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编程基础:认识常用的基本类型相关推荐

  1. Arduino编程基础与常用函数(详细)解析

    Arduino编程基础 关键字: if.if-else.for.switch.case.while.do-while.break.continue.return.goto. 语法符号:每条语句以&qu ...

  2. linux基础命令_Linux编程基础:常用命令

    命令格式 在学习具体命令之前,需先了解Linux常用命令的基本格式.Linux系统中的命令遵循如下的基本格式: command [options] [arguments] 其中command表示命令的 ...

  3. Java编程基础(3)——字典类型

    今天,要用到字典类型,所以就查了了一下,直接上源码: Individual indiv = new Individual(); //Individual是一个类,自己创建的,这里就不写具体内容了,只是 ...

  4. 【转】10.Qt编程涉及的术语和名词

    本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字,它们不一定专属于 Qt,在其它的 C/C++ 开发过程中也会使用到. Project Project 的中文翻译是"项目" ...

  5. java基础案例教程第二章_第2章Java编程基础_补充案例教程.doc

    第2章Java编程基础_补充案例教程 博学谷--让IT教学更简单,让IT学习更有效博学谷--让IT教学更简单,让IT学习更有效 PAGE \* MERGEFORMAT34PAGE \* MERGEFO ...

  6. QT开发(五十)——QT串口编程基础

    QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要 ...

  7. python字符串实例_慢步学python,编程基础,字符串类型例子及输出

    想了解python的安装及运行的可以看慢步之前写的文章. 今天继续python编程基础内容,字符串类型数据. python里面主要的数据类型是数值类型和字符串类型.计算机可以进行运算的是数值,字符串不 ...

  8. java中的常用名词,Java编程基础常见英语词汇

    Java编程基础常见英语词汇 Java编程基础中常见英语的词汇有哪些呢?这些都是学Java编程需要运用到的,下面内容由小编为大家介绍Java编程基础常见英语词汇,供大家参考! Java编程基础常见英语 ...

  9. Shell编程基础常用代码1

    Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...

最新文章

  1. JS同时上传表单图片和表单信息并把上传信息存入数据库,带php后端源码
  2. Plotly可视化输出数据表格(table):简单表格、添加链接的表格
  3. 英特尔将进行重大业务重组
  4. CentOS 6.7安装ZooKeeper 3.4.9
  5. golang beego 文件上传
  6. iTerm2 都不会用,还敢自称老司机?
  7. 【OpenCV学习笔记之一】图像加载,修改及保存
  8. 计算机视觉算法——图像分类网络总结
  9. 直流电机基本系统模型
  10. SAP document builder功能一览
  11. Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded
  12. ppt中覆盖原有图片文字并且添加新文字的操作方法,有截图
  13. 我的世界服务器公会系统,[娱乐|综合|RPG] [付费] Advanced Clans — 更好的公会系统 [1.8-1.15]...
  14. 第二次作业 项目质量管理重点知识梳理
  15. MATLAB遗传算法工具箱的函数及实例
  16. 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
  17. 微信小程序的一些开发限制
  18. R语言列联表的统计分析及假设检验
  19. Word插入页码简单方法
  20. 女孩起名字:100个优秀的女孩名字大全

热门文章

  1. h5课件制作_益阳H5课件制作团队
  2. 警惕!练字时容易遇到的几大心态问题,看看你有哪些?
  3. C++打点计时器工具
  4. 复合线转权属线lisp_请大神帮忙分析这一点处怎么可能是裂缝(检查多段线之间的缝隙)...
  5. 从华为事件看云形态发展
  6. ps基础学习:图案图章工具画布填充
  7. 盘点为云计算发展做出贡献的十位先驱
  8. 离散余弦变换(DCT)的来龙去脉
  9. 0019---求圆台的体积
  10. 大整数加法【信息学奥赛一本通-1168】