Qt字符串类[QString]及字符串链表类[QStringList]

Qt字符串类[QString]及Qt共用体类[QVariant]

  • 断点调试快捷键
  • QString类
    • 隐式共享
    • QString构造
    • QString与int、float、double之间互相转换
    • QString与const char*之间转换
    • QString与QDateTime之间转换
    • QString常用方法
    • QString指定位置字符
    • QString插入与修改
    • QString去除空格
    • QString查询字符
    • QString比较函数
    • QString分割字符串
    • QString截取字符串
  • QStringList类
    • 添加元素
    • 遍历链表
      • 循环遍历
      • 迭代器遍历
    • 查看链表中是否存在某元素
    • 删除元素

断点调试快捷键

快捷键 功能
F9 设置/取消断点
F5 开始调试/跳到下一个断点
F10 单步
F11 单步进入
Shift + F11 单步跳出
Ctrl + F10 跳到指定行
Shift + F5 结束断点调试

QString类

隐式共享

    隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。隐式共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递的数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。隐式共享技术可以大大降低对内存的开销及CPU资源的消耗,很大程度提高应用程序的运行效率。
    QString类保存了16位的Unicode值,Unicode把所有语言都统一到一套编码里,Unicode提供UTF-8、UTF-16、UTF-32编码方式。UTF-8以字节为单位对Unicode进行编码,对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。

QString构造

  1. const char *
const char *c1 = "Hello";
QString s1(c1);
  1. 使用另一个QString对象初始化[拷贝构造函数]
QString s("Hello");
QString s1(s);	// 与QString s1 = s;效果等同
  1. QChar数组
QChar c2[5] = {
     'H', 'e', 'l', 'l', 'o'};
QString s2(c2);

QString与int、float、double之间互相转换

  1. QString与int之间转换
QString s3("15");
// QString转int
int nAge = s3.toInt();// toInt(是否转换成功(bool),转换的进制);
// int转QString
QString s4(QString::number(nAge));
  1. QString与float之间转换
QString s5("3.14159");
// QString转float
float nPI = s5.toFloat();// toFloat(是否转换成功(bool));
// float转QString
QString s6(QString::number(nPI));
  1. QString与double之间转换
QString s7("1.4142135623731");
// QString转double
double n = s7.toDouble();// toDouble(是否转换成功(bool));
// double转QString
QString s8(QString::number(n));

QString与const char*之间转换

QString转const char*需要借助QByteArray

const char *c3("Hello World!");
// const char*转QString
QString s9(c3);
// QString转QByteArray
QByteArray byteArray = s9.toUtf8(); // 头文件:QByteArray
// QByteArray转QString
QString s10(byteArray.data());

QString与QDateTime之间转换

QString s11("2020-06-26 19:01:33");
// QString转QDateTime
QDateTime dateTime = QDateTime::fromString(s11, "yyyy-MM-dd hh:mm:ss");
// QDateTime转QString
QString s12(dateTime.toString("yyyy-MM-dd hh-mm-ss"));

QString常用方法

  1. 拼接
    使用:+、+=、尾部追加方法:append()、头部追加方法:prepend()
QString s13("H");
// +
s13 = s13 + "ello";
// +=
s13 += " Wor";
// 尾部追加
s13.append("ld");
// 头部追加
s13.prepend("A ");
  1. 格式化
    A. sprintf()方法
    B. QString arg()组合字符串
QString s14;
// A. sprintf()方法
s14.sprintf("%s%d%s", "鱼的记忆是",7,"秒的故事!");
// B. arg()组合方法
QString s15(QString("%1%2%3")
           .arg("鱼的记忆是")
           .arg(7)
           .arg("秒的故事!"));

QString指定位置字符

A、at()方法

B、下标运算符[]

QString s16("Hello World!");
// A、at()方法
QChar c4(s16.at(0));
// B、下标运算符[]
QChar c5(s16[0]);

QString插入与修改

A、头部插入 prepend()方法

B、尾部插入 append()方法

C、任意位置插入

D、修改字符串 replace()方法

QString s17("ell");
// A、头部插入 prepend()方法
s17.prepend("H");
// B、尾部插入 append()方法
s17.append("orld!");
// C、任意位置插入
s17.insert(5, " Wo");
// D、修改字符串 replace()方法
s17.replace(6, 5, "wORLD");

QString去除空格

A、去除字符串两端空格 trimmed()方法

B、去除字符串两端空格,其他地方的空格以一个空格替代 simplified()方法

 QString s18("    Hello World!      ");
 // A、去除字符串两端空格 trimmed()方法
s18 = s18.trimmed();
// B、去除字符串两端空格,其他地方的空格以一个空格替代 simplified()方法
QString s19("    Hello    World!    ");
s19 = s19.simplified();

QString查询字符

A、头部查询 startsWith()方法

B、尾部查询 endsWith()方法

C、其他位置查询 contains()方法

QString s20("Tom and Jerry are good friends.");
// A、头部查询 startsWith()方法
bool isTom = s20.startsWith("tom", Qt::CaseInsensitive);
// B、尾部查询 endsWith()方法
bool isFriends = s20.endsWith("friends.", Qt::CaseInsensitive);
// C、其他位置查询 contains()方法
bool isGood = s20.contains("good", Qt::CaseInsensitive);

QString比较函数

使用:compare()方法

// 使用compare()方法
int isCompare = QString::compare("tom", "Tom", Qt::CaseInsensitive);

QString分割字符串

使用:split()方法

QString s21("Hello World");
QStringList strList;
// 使用:split()方法
strList = s21.split(" ");

QString截取字符串

使用:mid()方法

QString s22("汤姆和杰瑞是好朋友");
// 使用:mid()方法
s22 = s22.mid(0,5);

QStringList类

添加元素

  1. <<运算符

  2. 尾部追加 append()方法

  3. 头部追加 prepend()方法

  4. 任意位置追加 使用:insert()方法

QStringList weekList;
// <<运算符添加元素
weekList << "星期二";
weekList << "星期三" << "星期四"
         << "星期五" << "星期六";
// 尾部追加
weekList.append("星期日");
// 头部追加
weekList.prepend("星期一");
// 任意位置追加
weekList.insert(0,"星期零")

遍历链表

循环遍历

  1. for

  2. foreach

// for
qDebug() << "使用for";
for(int i = 0; i < weekList.size(); i++) {
     
    qDebug() << weekList[i];    // weekList[i]等同于weekList.at(i);
    }

// foreach遍历
qDebug() << "使用foreach";
foreach (QString s, weekList) {
     
    qDebug() << s;
}

迭代器遍历

  1. STL风格迭代器(读写、只读)

  2. Java风格迭代器(读写、只读)

// STL风格读写迭代器
qDebug() << "STL风格读写迭代器";
QStringList::iterator it_rw;
for(it_rw = weekList.begin(); it_rw != weekList.end(); ++it_rw){
     
    qDebug() << *it_rw;
}

// STL风格只读迭代器
qDebug() << "STL风格只读迭代器";
QStringList::const_iterator it_r;
for(it_r = weekList.constBegin(); it_r != weekList.constEnd(); ++it_r) {
     
    qDebug() << *it_r;
}

// Java风格读写迭代器
qDebug() << "Java风格读写迭代器";
QMutableListIterator<QString> itor_rw(weekList);
for(itor_rw.toFront();itor_rw.hasNext(); ) {
     
    qDebug() << itor_rw.next();
}

// Java风格只读迭代器
qDebug() << "Java风格只读迭代器";
QListIterator<QString> itor_r(weekList);
for(itor_r.toFront();itor_r.hasNext(); ){
     
    qDebug() << itor_r.next();
}

查看链表中是否存在某元素

使用:contains()方法
参数:contains(要查找的字符串, 大小写是否敏感[带默认值]);

bool isContain = weekList.contains("星期一");

删除元素

  1. 删除第一个元素 使用:removeFirst()方法

  2. 删除最后一个元素 使用:removeLast()方法

  3. 删除指定元素 使用:removeOne()方法

  4. 删除所有指定元素 使用:removeAll()方法

  5. 删除指定索引值元素 使用:removeAt()方法

  6. 清空链表 使用:clear()方法

// 删除第一个元素
weekList.removeFirst();
// 删除最后一个元素
weekList.removeLast();
//  删除指定元素
weekList.removeOne("星期三");
// 删除所有指定元素
weekList.removeAll("星期一");
// 删除指定索引值元素
weekList.removeAt(3);
// 清空链表
weekList.clear();

Qt字符串类[QString]及字符串链表类[QStringList]_第1张图片
奇牛学院_佳人学院链接

你可能感兴趣的:(Qt,c++,qt)