【qt】QString字符串

news2024/10/6 0:37:09

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

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.coloradmin.cn/o/1658198.html

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

相关文章

《吸血鬼崛起》大剑技能是什么 大剑武器连招教学

V Rising《吸血鬼崛起》是一款热门游戏&#xff0c;在STEAM刚刚推出了正式版&#xff0c;而在游戏中如何利用武器连招输出高是新手玩家常常困扰的问题。如果你还不太清楚&#xff0c;那么一起来看看V Rising中的武器连招推荐吧。 在V Rising中&#xff0c;你可以在数字栏里装备…

物联网实战--平台篇之(五)账户界面

目录 一、界面框架 二、首页(未登录) 三、验证码登录 四、密码登录 五、帐号注册 六、忘记密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/cat…

压缩归档库-Snappy介绍

1.简介 Snappy 是一个 C 编写的压缩和解压缩库&#xff0c;由 Google 开发。它专为速度而设计&#xff0c;而不是最大压缩率或与其他压缩库的兼容性。 Snappy 通常用于需要快速压缩和解压缩的场景。 Snappy具有以下属性&#xff1a; 快速&#xff1a;压缩速度达到250 MB/秒及…

AMCA乙二胺,可发出蓝色荧光具有较好的反应活性和稳定性

基本信息&#xff1a; 中文名&#xff1a;AMCA乙二胺 英文名&#xff1a;AMCA Ethylenediamine 分子量&#xff1a;503.35 外观&#xff1a;无色至浅黄色固体/粉末 规格&#xff1a;10mg、25mg、50mg&#xff08;同时可提供mg级以及kg级的产品开发服务&#xff09; 纯度&…

数智结合,智慧合同让法务管理发挥内在价值

在当今这个信息化、数字化飞速发展的时代&#xff0c;数据已成为企业重要的战略资源。法务管理作为企业内部控制和风险防范的重要环节&#xff0c;其重要性不言而喻。然而&#xff0c;传统的法务管理模式往往存在效率低下、信息孤岛、反应迟缓等问题。在这样的背景下&#xff0…

在Ubuntu安装RPM文件

Ubuntu软件源包含数千个deb软件包&#xff0c;可以从Ubuntu软件中心或使用apt命令行安装。 Deb是所有基于Debian的Linux发行版&#xff0c;例如包括Ubuntu&#xff0c;Linux mint等发行版使用的安装包格式。 如果某些软件在Ubuntu软件源中不可用&#xff0c;可以通过启用适当的…

为什么智慧校园是校园信息化发展的必然趋势

怎么从数字化学校的服务形式和运维办理上进行建造&#xff0c;如何为高校供给快捷、高效、有用的运维服务是数字化学校完成“才智”的重要目标&#xff0c;也是学校提高教育的必然趋势。 首先&#xff0c;智能可视化办理&#xff0c;可视化是数字化学校发展的必然趋势。可视化即…

软件系统工程建设全套资料(交付清单)

软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c…

子查询之一(单行子查询, 多行子查询)

1. 子查询 子查询是指一个查询语句嵌套在另一个查询语句内部的查询.这个特性在MySQL4.1开始引入. SQL中子查询的使用大大增强了SELECT查询的能力.因为很多时候查询需要从结果集中获取数据&#xff0c;或者需要从同一个表中先计算得到一个数据结果&#xff0c;然后与这个数据结…

基于51单片机锅炉水位-温度-压力检测控制系统proteus仿真设计

基于51单片机锅炉监控系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0056 1.主要功能&#xff1a; 基于51单片机AT89C51/52&#xff08;与…

ESP-WROOM-32配置Arduino IDE开发环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载Arduino IDE二、安装工具集三、测试样例1.选则开发板2.连接开发板3.示例程序 四、使用官方示例程序总结 前言 之前用了很多注入STM32、树莓派Pico和Ar…

车载测试系列:车载测试流程

车载测试流程是保证软件质量的重要支撑&#xff0c;优秀的团队都必须拥有规范的流程体系支撑&#xff0c;它能够约束测试人员的测试行为&#xff0c;约束测试环境的测试精度&#xff0c;提升测试的覆盖度&#xff0c;保证团队成员工作的协调性。 该测试流程建立的依据&#xf…

三.Django--ORM(操作数据库)

目录 1 什么是ORM 1.1 ORM优势 1.2ORM 劣势 1.3 ORM与数据库的关系 2 ORM 2.1 作用 2.2 连接数据库 2.3 表操作--设置字段 2.4 数据库的迁移 写路由增删改查操作 项目里的urls.py: app里的views.py: 注意点: 1 什么是ORM ORM中文---对象-关系映射 在MTV,MVC设计…

每日Attention学习3——Cross-level Feature Fusion

模块出处 [link] [code] [PR 23] Cross-level Feature Aggregation Network for Polyp Segmentation 模块名称 Cross-level Feature Fusion (CFF) 模块作用 双级特征融合 模块结构 模块代码 import torch import torch.nn as nnclass BasicConv2d(nn.Module):def __init__(…

day1_slidingWindow

一、滑动窗口模板 // 注意&#xff1a;java 代码由 chatGPT&#x1f916; 根据我的 cpp 代码翻译&#xff0c;旨在帮助不同背景的读者理解算法逻辑。 // 本代码不保证正确性&#xff0c;仅供参考。如有疑惑&#xff0c;可以参照我写的 cpp 代码对比查看。import java.util.Has…

Mac YOLO V9推理测试

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 工程及模型下载&#xff1a;​​​​​​​https://github.com/WongKinYiu/yolov9 git clone https://github.com/WongKinYiu/yolov9.git 克隆后安装相关依赖&#xff08;没啥依赖好装…

轮廓提取、矩形标记时,点的位置需要重标

在下图中的0&#xff0c;3&#xff0c;1&#xff0c;2位置如何变换成0&#xff0c;1&#xff0c;2&#xff0c;3 先显示结果&#xff1a; 变换之后图&#xff1a; 这边提供两种解决方案&#xff1a; 第一种&#xff1a;将坐标值相加求和&#xff0c;采用冒泡排序实现从小到大…

基于51单片机可调幅度频率波形信号发生器

基于51单片机可调幅度频率信号发生器( proteus仿真程序原理图报告讲解视频&#xff09; 1.主要功能&#xff1a; 基于51单片机的三角波信号发生器 1、幅值在0-5V可以通过按键调整&#xff0c;频率在0-50Hz,可以通过按键调整 2、通过LCD1602显示幅值和频率 3、使用示波器查…

postman介绍、安装、使用、功能特点、注意事项

Postman是一款流行的API开发工具&#xff0c;它提供了丰富的功能&#xff0c;包括创建、测试、调试和文档化API。本文将介绍Postman的安装、使用方法&#xff0c;以及其功能特点和注意事项。 1. 介绍 Postman是一款用于构建、测试和调试API的工具&#xff0c;它提供了用户友好的…

2. Linux 基本指令(上)|ls|pwd|cd|tree|touch|mkdir|rmdir|rm

前言 计算机软硬件体系结构 层状结构应用软件Word&#xff0c;Matlab操作系统Windows&#xff0c;Linux设备驱动声卡驱动硬件CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;显示器&#xff0c;键盘 操作系统概念 操作系统 是一款进行软硬件资源管理的软件 例子 比如在学…