Qt编程基础:认识常用的基本类型

article/2025/9/28 10:06:39

前言

上一节已经成功创建了一个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个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享


http://chatgpt.dhexx.cn/article/8AEITmXb.shtml

相关文章

[QT入门篇]编程基础知识

一、坐标体系 在 Qt 中窗口的显示是需要指定位置的&#xff0c;这个位置是通过坐标来确定的&#xff0c;所有坐标的选取都是基于坐标原点来确定的&#xff0c;Qt的坐标原点在窗口的左上角。 在一个 Qt 窗口中一般都有很多子窗口内嵌到这个父窗口中&#xff0c;其中每个窗口都有…

QT高级编程之QT基本概览

QT高级编程 主要从以下几个方面来介绍QT高级编程&#xff0c;并介绍QT相关的概念。 1、 QT部件Widget&#xff1b; 2、 QT信号与槽机制&#xff1b; 3、 对象树关系&#xff1b; 4、 布局管理&#xff1b; 5、标准对话框以及自定义对话框&#xff1b; 6、文件与目录&#xff…

QT5编程入门教程(非常详细)

Qt 是一个跨平台的 C 框架&#xff08;C库&#xff09;&#xff0c;目前最新的版本是 Qt5。Qt5 还包含了很多小版本&#xff0c;其中推荐 Qt5.6 或 Qt5.9&#xff0c;这两个版本是 LTS 版本&#xff08;即长期支持版本&#xff09;&#xff0c;Bug较少&#xff0c;相对稳定。 Q…

取模和与运算的一点关系

与n取模其实就是和n-1相与 当然是在二进制基础上 在HashMap的 先高16位异或低16位再取模运算 取模运算转化成位运算公式:a%(2^n) 等价于 a&(2^n-1),而&操作比%操作具有更高的效率

负数的与运算

计算机中的位运算是基于补码的。正数的原码反码补码相同&#xff0c;而负数有一些差别。 如&#xff1a; 7的补码为0111 -7的补码为1001。其计算过程为先算出7的原码0111&#xff0c;按位取反得1000&#xff0c;在加上1得1001。这个步骤也是其他负数计算补码的方式。 示例&…

数与运算

数学是研究数与运算的一门科学&#xff0c;数和运算都是人类根据自然界的客观规律抽象出来的&#xff0c;人们利用抽象的假定去研究更高层次客观规律&#xff0c;再利用这些客观规律解决自然界中出现的问题&#xff0c;这就是数学学科的用途。 数学中的数由什么组成的&#xff…

C/C++:与运算、或运算、异或运算、指针

前言忘记进制的同学先看这里&#xff1a; 十进制数&#xff0c;没有前缀 二进制数&#xff0c;前缀是0b 八进制数&#xff0c;前缀是0o 十六进制数&#xff0c;前缀是0xlet decimalInteger 17 let binaryInteger 0b10001 // 二进制的17 let octalInteger 0o21 …

“”是什么含义?与运算入门级讲解;什么是与运算?

与运算&#xff08;AND&#xff09;是计算机中最基础、最常用的一种逻辑运算&#xff0c;也被称为按位与&#xff08;Bitwise AND&#xff09;运算。它是指在二进制数中&#xff0c;对两个二进制数的每一位进行逻辑与操作&#xff0c;只有当两个二进制数的对应位都为1时&#x…

数字电路三种基本逻辑运算关系:与运算、或运算、非运算

1、基本概念 1.逻辑常量与变量&#xff1a;逻辑常量只有两个&#xff0c;即0和1&#xff0c;用来表示两个对立的逻辑状态。逻辑变量与普通代数一样&#xff0c;也可以用字母、符号、数字及其组合来表示&#xff0c;但它们之间有着本质区别&#xff0c;因为逻辑变量的取值只…

二进制与运算、或运算、非运算

与运算 "与"运算是计算机中一种基本的逻辑运算方式&#xff0c;符号表示为&&#xff0c;运算法则为遇0得0。也就是说只要有0&#xff0c;结果即为0。 举例 或运算 "或"运算符号表示为|&#xff0c;运算法则为遇1得1。也就是说只要有1&#xff0c;结…

​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​

说明 所有的位运算符操作的都是二进制&#xff0c;而不是我们日常生活中常用的十进制。 在系统中&#xff0c;一个字节占8位。 按位与运算符&#xff08;&&#xff09; 参加运算的两个数据&#xff0c;按二进制位进行“与”运算。 运算规则&#xff1a;如果两个二进制…

第三章 运算方法与运算器

文章目录 定点补码加减法运算补码加减法运算方法溢出及检测溢出检测操作数与运算结果的符号位是否一致最高位的进位和符号位的进位是否一致变形补码 补码加减法的逻辑实现 移码加减运算及实现逻辑移码的加法运算移码加减法的溢出判断直接采用移码运算的溢出判断方法采用双符号判…

2019做报表用什么软件:报表类型,产品推荐

在大数据时代&#xff0c;报表可以帮助我们从海量数据中挖掘有用的数据&#xff0c;选择软件做什么就变得尤为重要。选择什么类型的软件进行报表?推荐哪些报表产品?本文请一位专业的数据分析师&#xff0c;介绍选择报表软件的经验。 ……阅读更多&#xff0c;请戳原文链接&am…

免费报表软件有哪些?5款热门工具

在企业管理过程中&#xff0c;报表往往都会通过一些简洁的图表方式&#xff0c;为大家呈现所有的数据。报表软件&#xff0c;可以在操作的过程中有效提升工作效率&#xff0c;所以有很多企业早就已经选择跟随信息技术的潮流&#xff0c;选择报表软件工具。很多人也一直都在关注…

分享几款好用免费的报表软件_报表软件推荐

Smartbi Insight Smartbi Insight&#xff08;企业报表平台&#xff09;以中国式报表、多维度分析、可视化仪表盘为核心&#xff0c;满足报表需求的功能以“真Excel”为特色&#xff0c;将Office Excel和WPS表格变为企业级WEB报表设计器&#xff0c;表格样式与计算逻辑的灵活性…

JimuReport积木报表 v1.5.8版本发布—免费的数据可视化报表

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

报表开发流程

报表开发是数据分析师的常见工作之一。报表是业务监控必备工具之一(用数据说话)&#xff0c;另一方面&#xff0c;报表监控的指标通常都是业务相关的重要指标&#xff0c;做报表的过程也是深入了解业务的过程。 把数据分析分为“描述、解释、预测、控制”4个层级。那么报表开发…

免费报表工具 - RDP报表工具

公司一直用ireport&#xff0c;后来偶然在一个报表QQ群里&#xff0c;看到了有人发RDP报表工具链接&#xff0c;一开始就以为是广告&#xff0c;都没敢点&#xff0c;要知道现在有太多骗子&#xff0c;后来看到群里有人问问题&#xff0c;又截了一些图&#xff0c;才敢放心点进…

mysql 免费报表工具_10款最出色的免费数据库管理工具

任何web软件和应用程序都需要强大的数据库管理工具。目前,网上的数据库管理工具各式各样,而开发者选择一款适合自己的数据库管理工具尤为重要。小编为大家收集了10款超强的数据库管理工具,帮助开发者轻松搞定很多难题。 OpenKeyval是一款免费、开源的键值数据库管理工具,基…

java 报表工具_最好用的5款java web免费报表工具

阅读提示&#xff1a; 文章中与FineReport软件使用的相关内容&#xff0c;基于软件的V7.0旧版本编写&#xff0c;不代表软件最新的使用方式。 FineReport最新版免费试用&#xff1a;https://www.finereport.com/product/active FineReport最新版使用教程&#xff1a;https://he…