【qt】QString字符串

前言:
这节很轻松,大家可以放心食用 ♪(・ω・)ノ

QString目录

  • 一.与c++String的区别
  • 二.隐式共享
  • 三.初始化
  • 四.判断是否为空串
  • 五.字符串的长度
  • 六.添加字符串
    • 1.尾加
    • 2.任意位置加
  • 七.替换字符串
  • 八.修改字符串
  • 九.删除字符串
    • 1.清空
  • 十.获取子串
    • 1.任意位置获取
    • 2.左获取
    • 3.右获取
  • 十一.分割字符串
  • 十二.转换成c语言字符串
  • 十三.类型转换
    • 1.字符串转整数
    • 2.字符串转小数
  • 十三.小项目 ‘藏头诗’

一.与c++String的区别

c++字符串的每个字符,占一个字节
但是QString每个字符占两个字节。

这样就完美解决了汉字占两个字节的问题。

内存变大了,自然好处少不了
隐式共享就是再此基础上完成的

二.隐式共享

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QString str1="姚国林";QString str2=str1;//拷贝构造函数,默认浅拷贝qDebug()<<str1;qDebug()<<str2;str2[2]='A';//深拷贝,不然str1的值也会被改变qDebug()<<str1;qDebug()<<str2;str1=str2;//str1又指向str2,str1的内存自动销毁qDebug()<<str1;qDebug()<<str2;
}MainWindow::~MainWindow()
{delete ui;
}

运行结果:
在这里插入图片描述
想必大家对结果并不意外,最要是内部的实现机制,你知道嘛?不慌下面给大家画一个图!

在这里插入图片描述

QString会多一个用来记录指针指向的计数器
当我们用str1初始化str2时,会做一个浅拷贝,学过c++的应该都知道,就是指针也指向同一块内存。
对srt2的值进行修改,如果是浅拷贝,则str1也会被修改,此时,str2会做一个深拷贝,重新开辟一块内存。
如果现在又让str2赋值给str1,则str2的计数器为2,str1的计数器为0,就会自动销毁这一块内存。

所以说QString这种隐式共享也被称之为写时复制,会大大的节省开销,如果一样就指向同一块内存,如果不一样,就马上开辟一块内存。

三.初始化

可以用=,或者()来进行初始化
在这里插入图片描述
运行结果:
在这里插入图片描述

四.判断是否为空串

关键字:isEmpty()

在这里插入图片描述
运行结果:
在这里插入图片描述
值得注意的是 “” 是空串,但是 " " 不是空串!

五.字符串的长度

三个接口:size(),count(),size()

在这里插入图片描述
运行结果:
在这里插入图片描述

六.添加字符串

1.尾加

对字符串进行+=即可

在这里插入图片描述
运行结果:
在这里插入图片描述

还可以append()

在这里插入图片描述
运行结果:
在这里插入图片描述
哈哈你们是大帅哥吗?是的话,评论一个是!

2.任意位置加

insert()

在这里插入图片描述
运行结果:
在这里插入图片描述
我真滴服了,我明明是大帅哥。

在这里插入图片描述
运行结果:
在这里插入图片描述
当添加的位置大于原来字符串时,中间会自动补空格。

七.替换字符串

replace()

在这里插入图片描述
运行结果:
在这里插入图片描述
默认是区分大小写的!可以加一个Qt::CaseInsensitive不区分大小写替换
在这里插入图片描述
运行结果:
在这里插入图片描述

八.修改字符串

直接可以用下标进行修改

在这里插入图片描述
运行结果:
在这里插入图片描述

九.删除字符串

remove()

在这里插入图片描述
运行结果:
在这里插入图片描述
可以指定位置删除,也可以直接查值删除!

1.清空

clear()

在这里插入图片描述
运行结果:
在这里插入图片描述

十.获取子串

1.任意位置获取

mid()
在这里插入图片描述
运行结果:

在这里插入图片描述

2.左获取

left()

在这里插入图片描述
运行结果:
在这里插入图片描述

3.右获取

right()

在这里插入图片描述
运行结果:
在这里插入图片描述

十一.分割字符串

split(),返回值是一个QStringList容器,后面会讲…

在这里插入图片描述

运行结果:
在这里插入图片描述

十二.转换成c语言字符串

先转换成标准字符串(toStdString())再转换成c语言的字符串(c_str())

十三.类型转换

1.字符串转整数

toInt(bool,进制)

在这里插入图片描述
运行结果:
有字母的转换失败!
在这里插入图片描述
还可以转换成16进制:
在这里插入图片描述
运行结果:
在这里插入图片描述
123的16进制就是291
在这里插入图片描述

2.字符串转小数

toDouble()

在这里插入图片描述
运行结果:
在这里插入图片描述
其他类型转换同理!

十三.小项目 ‘藏头诗’

OK,光说不练假把式,现在我们就来做一个自己的小项目。
先看效果:
在这里插入图片描述
点击生成:
在这里插入图片描述

哈哈,事不宜迟,我们开始吧

首先ui设计器去设计界面,用到Label,Text Edit,Push Button,Line Edit 这几个组件

在这里插入图片描述

然后在按钮用转到槽

#include <QMessageBox>
...
void MainWindow::on_pushButton_clicked()
{if(ui->textEdit->toPlainText().isEmpty()){QMessageBox::information(this,"提示","文本为空,请输入文本",QMessageBox::Ok);}else{QString str=ui->textEdit->toPlainText();QStringList list=str.split('\n');QString ret;for(int i=0;i<list.size();i++){ret+=list[i].left(1);}ui->lineEdit->setText(ret);}}

首先判断文本是否为空,为空就出现提示框

在这里插入图片描述

然后将所有文本添加到字符串中,用\n(换行字符)进行分割。
然后再取子串进行添加,将其设置到行框上即可!

啊!终于完了,陌生人不知道你何时能看到,加油吧。
道阻且长,行则将至,我的成长之路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言项目】贪吃蛇(上)

个人主页 ~ gitee仓库~ 欢迎大家来到C语言系列的最后一个篇章–贪吃蛇游戏的实现&#xff0c;当我们实现了贪吃蛇之后&#xff0c;我们的C语言就算是登堂入室了&#xff0c;基本会使用了&#xff0c;当然&#xff0c;想要更加熟练地使用还需要多多练习 贪吃蛇 一、目标二、需要…

(八)JSP教程——application对象

application对象是一个比较重要的对象&#xff0c;服务器在启动后就会产生这个application对象&#xff0c;所有连接到服务器的客户端application对象都是相同的&#xff0c;所有的客户端共享这个内置的application对象&#xff0c;直到服务器关闭为止。 可以使用application对…

MGRE 实验

需求&#xff1a;1、R2为ISP&#xff0c;其上只能配置IP地址。 2、R1-R2之间为HDLC封装 3、R2-R3之间为ppp封装&#xff0c;pap认证&#xff0c;R2为主认证方。 4、R2-R4之间为ppp封装&#xff0c;chap认证&#xff0c;R2为主认证方。 5、R1、R2、R3构建MGRE环境&#xff0…

sourceTree push失败

新电脑选择commit and push&#xff0c;报错了&#xff0c;不过commit成功&#xff0c;只不过push失败了。 原因是这个&#xff0c;PuTTYs cache and carry on connecting. 这里的ssh选择的是 PuTTY/Plink&#xff0c;本地没有这个ssh密钥&#xff0c;改换成openSSH&#xff…

DEV--C++小游戏(吃星星(0.1))

目录 吃星星&#xff08;0.1&#xff09; 简介 头文件 命名空间变量 副函数 清屏函数 打印地图函数 移动函数 主函数 0.1版完整代码 吃星星&#xff08;0.1&#xff09; 注&#xff1a;版本<1为未实现或只实现部分 简介 用wasd去吃‘*’ 头文件 #include<bi…

各种索引地址

直接索引&#xff0c;一级间接索引&#xff0c;二级间接索引 【软考】解析直接地址索引和间接地址索引_直接地址索引和一级地址索引-CSDN博客 系统架构设计师真题解析&#xff08;1&#xff09;—— 文件系统物理结构_文件系统采用索引节点管理-CSDN博客 磁盘块&#xff0c…

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解&#xff1a; HarmonyOS NEXT Preview系列教程基于Api11讲解-IT营大地老师 1 、电脑要求以及注意事项 操作系统 &#xff1a; Windows10 64 位、 Windows11 64 位 内存 &#xff1a; 8GB 及以上&#xff0c;推荐 16G…

AI中LangChain原理以及快速上手

AI中LangChain原理以及快速上手 什么是LangChain&#xff1f; LangChain是一种基于语言模型的自然语言处理技术&#xff0c;它可以将自然语言转换为向量表示&#xff0c;从而实现对自然语言的理解和处理。LangChain的核心思想是将自然语言中的每个单词或短语映射到一个高维向…

新火种AI|AI让大家都变“土”了!

作者&#xff1a;一号 编辑&#xff1a;美美 AI不仅要把人变“土”&#xff0c;还要把人变多样。 这个世界&#xff0c;终究是变“土”了。 今年五一假期&#xff0c;一个名为“Remini”的AI修图APP火遍了全网。注意&#xff0c;是Remini&#xff0c;而不是Redmi&#xff0…

Redis学习汇总

目录 1.Linux环境下安装redis 2.redis的数据结构及命令 3.redis.conf配置文件常用配置 3.redis的事务操作 4.redis实现乐观锁 5.通过jedis操作redis 6.Springboot集成redis 7.自定义一个RedisTemplate 8.持久化策略 RDB和AOF 9.redis集群环境搭建 10.哨兵模式 11.缓…

java集合中retainAll方法使用注意

java集合中retainAll方法使用注意 retainAll新的改变 retainAll retainAll()方法被用来找出两个集合的共同元素&#xff0c;并且只会在交集不为空的情况下返回true。通过比较操作前后集合的大小是否有变化&#xff0c;我们可以确定是否存在共同元素。 retainAl()方法会改变原集…

ES:基础查询语法(简单易懂)

一、基础查询语句的结构&#xff1a; GET http://ip:prot/textbook/_search GET { "query" : { ...query子句... }, "aggs" : { ..aggs子句.. }, "sort" : { ..sort子句.. } "from" : 0, // 返回搜索结果的开始位置 &…

解锁自动化办公新技能:Python实战应用-自动转发邮件到企业微信

&#x1f4e7; 【高效联络&#xff0c;信息不落空】 &#x1f4e7; 在这个信息爆炸的时代&#xff0c;作为企业的一员&#xff0c;我们如何从繁杂的邮件中迅速筛选出客户的心声、展会的新动向&#xff0c;同时又不遗漏每一份重要的咨询呢&#xff1f;秘诀就在我们的新策略里&a…

Springboot监听ConfigMap配置文件自动更新配置

背景&#xff1a; 最近调研使用k8s的ConfigMap来作为springboot项目的配置中心&#xff0c;需要实现热更新机制&#xff0c;避免pod重启影响业务。 ConfigMap作为挂载卷使用的时候可以更新pod中的配置内容&#xff0c;但是业务应用需要能监听并处理这些变更。我在测试的时候已…

Day3 | Java基础 | 4常见类

Day3 | Java基础 | 4 常见类 基础版Object类equalshashCode&#xff08;散列码&#xff09;hashCode和equals clone方法String类 问题回答版Object类Object类的常见方法有哪些&#xff1f;和equals()的区别是什么&#xff1f;为什么要有hashCode&#xff1f;hashCode和equals的…

FFmpeg常用命令详解与实战指南

下载地址&#xff1a;Releases BtbN/FFmpeg-Builds (github.com) 1. 获取视频信息 使用FFmpeg获取视频信息是最基本的操作之一。你可以使用-i选项指定输入文件&#xff0c;然后使用FFmpeg内置的分析器来获取视频的各种信息&#xff0c;包括视频编解码器、音频编解码器、分辨…

JAVA文件的简单操作

文件IO&#xff08;Input和Output&#xff09; 文件的输入和输出是人为规定的&#xff0c;那么什么是输入&#xff1f;什么是输出捏&#xff1f;在这里统一已CPU为基准 例如&#xff1a;将文件由内存写入硬盘就是输出&#xff0c;有硬盘写入内存就是输入。可以总结为&#xff…

OpenHarmony 3.2 Release版本实战开发——Codec HDI适配过程

简介 OpenHarmony Codec HDI&#xff08;Hardware Device Interface&#xff09;驱动框架基于 OpenMax 实现了视屏硬件编解码驱动&#xff0c;提供 Codec 基础能力接口供上层媒体服务调用&#xff0c;包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

C++反汇编,指针和内存分配细节,面试题05

文章目录 20. 指针 vs 引用21. new vs malloc 20. 指针 vs 引用 指针是实体&#xff0c;占用内存空间&#xff0c;逻辑上独立&#xff1b;引用是别名&#xff0c;与变量共享内存空间&#xff0c;逻辑上不独立。指针定义时可以不初始化&#xff1b;引用定义时必须初始化。指针的…

Cmake编译源代码生成库文件以及使用

在项目实战中&#xff0c;通过模块化设计能够使整个工程更加简洁明了。简单的示例如下&#xff1a; 1、项目结构 project_folder/├── CMakeLists.txt├── src/│ ├── my_library.cpp│ └── my_library.h└── app/└── main.cpp2、CMakeList文件 # CMake …