【qt】QString字符串1

简介: 【qt】QString字符串1

一.与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不区分大小写替换

运行结果:

八.修改字符串

直接可以用下标进行修改

运行结果:


【qt】QString字符串2:https://developer.aliyun.com/article/1507177?spm=a2c6h.13148508.setting.21.1da44f0eRYiaPa

相关文章
|
23天前
QT里面字符串转ieee754标准的float浮点数
QT里面字符串转ieee754标准的float浮点数
26 0
|
23天前
|
C语言 容器
【qt】QString字符串2
【qt】QString字符串2
10 0
|
23天前
|
Windows 安全 C++
Qt字符串类应用与常用基本数据类型
Qt字符串类应用与常用基本数据类型
|
23天前
QT去除QString字符串中空格的方法
QT去除QString字符串中空格的方法
|
23天前
【QFileDialog接口大全】 Qt5 QString类使用示例
【QFileDialog接口大全】 Qt5 QString类使用示例
16 1
|
23天前
|
C++
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
41 0
|
23天前
Qt 计算字符串和文件的md5 值
Qt 计算字符串和文件的md5 值
58 0
|
23天前
qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码
qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码
81 0
|
23天前
|
C++ 索引
C++ Qt开发:StringListModel字符串列表映射组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QStringListModel`字符串映射组件的常用方法及灵活运用。 `QStringListModel` 是 Qt 中用于处理字符串列表数据的模型类之一,它是 `QAbstractListModel` 的子类,用于在 Qt 的视图类(如 `QListView`、`QComboBox` 等)中显示字符串列表。该组件是用于在`Qt`中快速显示字符串列表的便捷模型类。该组件通常会配合`ListView`一起使
43 0
C++ Qt开发:StringListModel字符串列表映射组件
|
23天前
|
存储 自然语言处理 API
QT基础教程(QDebug和QString)
QT基础教程(QDebug和QString)
41 0

推荐镜像

更多