【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(换行字符)进行分割。
然后再取子串进行添加,将其设置到行框上即可!

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elastic 基于 RAG 的 AI 助手:利用 LLM 和私有 GitHub 问题分析应用程序问题

作者&#xff1a;来自 Elastic Bahubali Shetti 作为 SRE&#xff0c;分析应用程序比以往更加复杂。 你不仅必须确保应用程序以最佳状态运行以确保良好的客户体验&#xff0c;而且还必须了解某些情况下的内部工作原理以帮助排除故障。 分析基于生产的服务中的问题是一项团队运动…

EOCR-DS3T-05S电动机保护器 施耐德 EOCR-DS3系列

EOCR-DS3T-05S电动机保护器 施耐德 EOCR-DS3系列型号&#xff1a; EOCR-DS3-05S EOCR-DS3-30S EOCR-DS3-60S EOCR-DS3T-05S EOCR-DS3T-30S EOCR-DS3T-60S 基于MCU&#xff08;微处理器&#xff09;的2CT型产品 ■ 实时处理/高精度 ■ 电流设定范围&#xff1a;05型&#xff1…

【SpringBoot整合系列】SpringBoot整合Thymeleaf

目录 背景Thymeleaf简介Thymeleaf的特征模板引擎是什么 代码示例1.引入依赖2.修改配置文件&#xff0c;添加Thymeleaf的配置信息3.编写HTML模板文件4.编写控制器&#xff0c;返回ModelAndView&#xff0c;进行视图渲染 Thymeleaf语法1.常用标签/属性1.1 th:action1.2 th:method…

SpringBoot 使用Outlook邮箱发送邮件

目录 一、开启Outlook设置 二、依赖 三、配置文件 四、代码调用 一、开启Outlook设置 开启设置如图&#xff1a; 二、依赖 <!-- 邮箱依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mai…

Java -- (part25)

一.Junit单元测试 1.概述 是一个单元测试框架,可以代替main方法去执行其他的方法 2.使用 a.导入jar包 b.注解 Test:单独执行一个方法 Before:在Test之前执行,有几个Test就有几个Before After:在Test之后执行,有几个Test就有几个After 二.类的加载机制 1.类的加载时机…

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统 员工上班刷视频&#xff01; 员工上班炒股&#xff01; 员工上班干副业&#xff01; 碰见这种情况怎么办&#xff1f;当然是用电脑监控软件来监视员工的一举一动了&#xff0c;那么这样的软件有哪些呢&#…

充电桩测试:选择适合的负载箱

随着电动汽车的普及&#xff0c;充电桩的需求也在不断增加。为了保证充电桩的性能和安全&#xff0c;对其进行测试是非常重要的。在充电桩测试过程中&#xff0c;选择合适的负载箱是关键。本文将介绍如何选择合适的负载箱进行充电桩测试。 在进行充电桩测试之前&#xff0c;首先…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月&#xff0c;思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台&#xff0c;VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨&#xff0c;还进一步拓宽了研究…

【CTF-Crypto】RSA-选择明密文攻击 一文通

RSA&#xff1a;选择明密文攻击 关于选择明/密文攻击&#xff0c;其实这一般是打一套组合拳的&#xff0c;在网上找到了利用的思路&#xff0c;感觉下面这个题目是真正将这个问题实现了&#xff0c;所以还是非常棒的一道题&#xff0c;下面先了解一下该知识点&#xff1a;(来自…

【可实战】被测需求理解(需求文档是啥样的、从哪些角度进行需求评审、需求分析需要分析出哪些内容、如何提高需求分析能力)

产品人员会产出一个需求文档&#xff0c;然后组织一个需求的宣讲。测试人员的任务就是在需求宣讲当中&#xff0c;分析需求有没有存在一些问题&#xff0c;然后在需求宣讲结束之后通过分析需求文档&#xff0c;分析里面的测试点并预估一个排期。 一、需求文档是什么样的&#x…

SmartEDA电路仿真软件风靡教育圈:揭秘其背后的魅力所在

在当今的电子信息时代&#xff0c;随着科技的飞速发展&#xff0c;电路设计与仿真软件在教育领域的应用越来越广泛。特别是SmartEDA这款电路仿真软件&#xff0c;以其强大的功能和直观易用的操作界面&#xff0c;赢得了众多教师的青睐。那么&#xff0c;究竟是什么原因让SmartE…

给汉字注音可以主要拼音不要声调吗?这两个注音小技巧你一定会需要

一&#xff0c;前言 在中文学习中&#xff0c;拼音是一种非常重要的工具&#xff0c;它帮助学习者正确地发音和理解汉字。然而&#xff0c;在拼音的使用中&#xff0c;一个常见的问题是是否应该包含声调。有些人认为&#xff0c;只要拼音中有声母和韵母&#xff0c;就可以准确…

如何使用client-go构建pod web shell

代码示例及原理 原理是利用websocket协议实现对pod的exec登录&#xff0c;利用client-go构造与远程apiserver的长连接&#xff0c;将对pod容器的输入和pod容器的输出重定向到我们的io方法中&#xff0c;从而实现浏览器端的虚拟终端的效果消息体结构如下 type Connection stru…

苏州金龙何以成为塞尔维亚中国客车第一品牌?研发向上服务助力!

5月7日至8日&#xff0c;一场举世瞩目的会晤在塞尔维亚举行。作为塞尔维亚中国客车第一品牌&#xff0c;苏州金龙海格客车也为当地民众绿色公共出行提供了“中国力量”。 目前&#xff0c;苏州金龙海格客车在塞尔维亚保有量近200台&#xff0c;是在塞尔维亚保有量最大的中国客车…

鸿蒙OpenHarmony开发板【快速入门】大合集

快速入门 快速入门概述 基于IDE入门 搭建开发环境 搭建Windows环境搭建Ubuntu环境配置远程访问环境创建工程并获取源码 轻量系统&#xff08;基于Hi3861开发板&#xff09; 编写“Hello World”程序编译烧录运行 小型系统&#xff08;基于Hi3516开发板&#xff09; 编写“Hell…

上海计算机学会2023年8月月赛C++丙组T2下降幂多项式

题目描述 x 的 k 次下降幂定义为 x 的下降幂多项式是由 x 的一组下降幂及系数组成的算式&#xff1a; 给定下降幂多项式 f(x) 的系数 an​,an−1​,⋯,a0​ 与一个值 m&#xff0c;请计算f(m)mod1,000,000,007。 输入格式 第一行&#xff1a;两个整数 n 与 m第二行&#xff…

数据库加密数据模糊匹配查询技术方案

文章目录 前言沙雕方案内存加载解密密文映射表 常规做法实现数据库加密算法参考 分词组合加密&#xff08;推荐&#xff09; 超神方案总结个人简介 前言 在数据安全性和查询效率之间找到平衡是许多数据管理系统所面临的挑战之一。特别是在涉及加密数据的情况下&#xff0c;如何…

数据结构之单链表的基本操作

目录 一.定义一个单链表 二.实现基本操作 1&#xff09;链表的打印 2&#xff09;链表的尾插 3&#xff09;链表的头插 4&#xff09;链表的尾删 5&#xff09;链表的头删 6&#xff09; 链表的查找 7&#xff09;在指定位置之前插入数据 8&#xff09;在指定位置之…

Android 11 输入系统之InputDispatcher和应用窗口建立联系

InputDispatcher把输入事件传给应用之前&#xff0c;需要和应用窗口建立联系&#xff0c;了解了这个过程&#xff0c;就清楚了APP进程和InputDispatcher线程也就是SystemServer进程之间是如何传输数据了 我们向窗口addView的时候&#xff0c;都会调用到ViewRootImpl的setView方…

电脑文件加密软件有哪些?口碑、安全性最好的文件加密软件

某企业的一位员工因不慎将包含敏感客户数据的电脑丢失&#xff0c;导致企业面临巨大的法律风险和经济损失。 这一事件凸显了电脑文件加密的必要性。 如果该企业事先采用了文件加密软件对敏感数据进行保护&#xff0c;即使电脑丢失&#xff0c;攻击者也无法轻易获取到文件内容…