文章目录
- QT_字符串应用于常用基本数据类型
- Qt字符串类应用
- 创建与初始化
- 拼接
- 格式化(最常用)
- 查找与判断
- 截取
- 替换与删除
- 大小写转换
- 去除空白
- 拆分与合并
- 字符串与数值互转
- 比较
- 与 C 字符串互转
- 重复与填充
- QT常见基本数据类型
- 整数类型
- 浮点类型
- 字符类型
- 字节数组
- 万能容器
- 日期与时间
- 容器类
- 几何与图形类型
- 其他常用类型
- 使用建议
- 类型转换关系总览
QT_字符串应用于常用基本数据类型
Qt字符串类应用
创建与初始化
QString s1="Hello";// 直接赋值QStrings2("Hello");// 构造函数QString s3=QString("Hello");// 构造函数QString s4=QString::fromUtf8("你好");// 从 UTF-8 创建QString s5=QString::fromLocal8Bit("你好");// 从本地编码创建QString s6=QStringLiteral("Hello");// 编译期创建,性能最优QString s7=QString::number(42);// 数值 → 字符串QString s8=QString::number(3.14,'f',2);// "3.14"拼接
s1+s2;// 运算符拼接s1.append(s2);// 追加s1+=s2;// 追加s1.prepend("Hi ");// 在前面插入s1.insert(5," Qt");// 在指定位置插入QString::asprintf("%d-%d",2026,7);// 类似 printf 格式化格式化(最常用)
// arg() 按 %1, %2 ... 占位符替换QString msg=QString("姓名: %1, 年龄: %2, 成绩: %3").arg("张三").arg(20).arg(95.5);// 结果: "姓名: 张三, 年龄: 20, 成绩: 95.5"// 控制数字格式QString::number(3.14159,'f',2);// "3.14"(保留2位小数)QString::number(255,16);// "ff"(转十六进制)查找与判断
s.contains("Hello");// 是否包含子串s.startsWith("He");// 是否以...开头s.endsWith("lo");// 是否以...结尾s.indexOf("llo");// 查找子串,返回首次出现的位置(找不到返回 -1)s.lastIndexOf("l");// 查找子串,返回最后一次出现的位置s.count("l");// 子串出现的次数s.isEmpty();// 是否为空 ""s.isNull();// 是否为 null(未初始化)截取
s.left(5);// 取左边5个字符s.right(3);// 取右边3个字符s.mid(2,4);// 从索引2开始取4个字符s.at(0);// 取第0个字符(只读)s[0];// 取第0个字符(可读可写)s.front();// 第一个字符s.back();// 最后一个字符替换与删除
s.replace("Hello","Hi");// 替换s.remove(0,3);// 从索引0开始删除3个字符s.remove("llo");// 删除所有 "llo"大小写转换
s.toUpper();// 转大写 "HELLO"s.toLower();// 转小写 "hello"去除空白
s.trimmed();// 去除首尾空白(空格、换行、制表符)s.simplified();// 去除首尾空白 + 中间连续空白合并为一个空格拆分与合并
// 拆分:字符串 → 列表QString csv="张三,李四,王五";QStringList list=csv.split(",");// list = ["张三", "李四", "王五"]// 合并:列表 → 字符串QString joined=list.join(" | ");// joined = "张三 | 李四 | 王五"字符串与数值互转
// 字符串 → 数值QString s="123";s.toInt();// 123(int)s.toUInt();// 123(unsigned int)s.toLong();// 123Ls.toFloat();// 123.0fs.toDouble();// 123.0s.toLongLong();// 123LL// 带成功标志(推荐)boolok;intval=QString("abc").toInt(&ok);// ok = false, val = 0intval2=QString("456").toInt(&ok);// ok = true, val2 = 456// 数值 → 字符串QString::number(42);QString::number(3.14,'f',2);比较
s1==s2;// 是否相等s1!=s2;// 是否不等s1.compare(s2);// 字典序比较(0=相等,<0 小于,>0 大于)s1.compare(s2,Qt::CaseInsensitive);// 忽略大小写比较与 C 字符串互转
// QString → C 字符串s.toUtf8().constData();// 转 UTF-8 的 const char*(推荐)s.toLocal8Bit().constData();// 转本地编码的 const char*s.toStdString();// 转 std::string// C 字符串 → QStringQString::fromUtf8("Hello");// 从 UTF-8QString::fromLocal8Bit("Hello");// 从本地编码QString::fromStdString(stdStr);// 从 std::string重复与填充
QString s=QString("abc").repeated(3);// s = "abcabcabc"QString s2=QString("%1").arg(42,5,10,QChar('0'));// s2 = "00042"(宽度5,不足补0)QT常见基本数据类型
QT基本常见数据类型定义在#include<QtGlobal>中
整数类型
| Qt 类型 | 大小 | 范围 |
|---|---|---|
qint8/quint8 | 1 字节 | -128 ~ 127 / 0 ~ 255 |
qint16/quint16 | 2 字节 | -32768 ~ 32767 / 0 ~ 65535 |
qint32/quint32 | 4 字节 | -2³¹ ~ 2³¹-1 / 0 ~ 2³²-1 |
qint64/quint64 | 8 字节 | -2⁶³ ~ 2⁶³-1 / 0 ~ 2⁶⁴-1 |
qlonglong/qulonglong | 8 字节 | 同 qint64 / quint64 |
浮点类型
| Qt 类型 | 大小 | 说明 |
|---|---|---|
qfloat16 | 2 字节 | IEEE 754 半精度浮点 |
float | 4 字节 | 单精度(C++ 原生) |
double | 8 字节 | 双精度(C++ 原生) |
qreal | 8 字节 | 默认等同于double |
字符类型
// QChar —— 存储单个 Unicode 字符(2字节)QChar ch1='A';QChar ch2=QChar(0x4E2D);// '中'(Unicode 编码)QChar ch3=QChar::fromLatin1('B');ch1.isUpper();// truech1.isDigit();// falsech1.toLower();// 'a'ch1.unicode();// 65(Unicode 码点)字节数组
// QByteArray —— 存储原始字节数据QByteArraydata("Hello");data.append(" Qt");data.size();// 10data.at(0);// 'H'data.toHex();// "48656c6c6f205174"data.toBase64();// "SGVsbG8gUXQ="data.toUpper();// "HELLO QT"// 与 QString 互转QString str=QString::fromUtf8(data);QByteArray bytes=str.toUtf8();万能容器
// QVariant —— 可存储几乎任何 Qt 类型QVariantv1(42);QVariantv2(3.14);QVariantv3(QString("Hello"));QVariantv4(QDate::currentDate());// 取值v1.toInt();// 42v2.toDouble();// 3.14v3.toString();// "Hello"v4.toDate();// QDate// 类型判断v1.typeName();// "int"v1.isValid();// true日期与时间
// QDate —— 日期QDate d1=QDate::currentDate();// 今天QDated2(2026,7,7);// 指定日期d1.year();// 2026d1.month();// 7d1.day();// 7d1.dayOfWeek();// 2(周二)d1.daysInMonth();// 31d1.addDays(10);// 加10天d1.toString("yyyy-MM-dd");// "2026-07-07"QDate::fromString("2026-07-07","yyyy-MM-dd");// 字符串 → QDate// QTime —— 时间QTime t1=QTime::currentTime();// 当前时间QTimet2(14,30,0);// 14:30:00t1.hour();// 14t1.minute();// 30t1.second();// 0t1.addSecs(3600);// 加1小时t1.toString("HH:mm:ss");// "14:30:00"// QDateTime —— 日期 + 时间QDateTime dt1=QDateTime::currentDateTime();QDateTimedt2(QDate(2026,7,7),QTime(14,30));dt1.toString("yyyy-MM-dd HH:mm:ss");// "2026-07-07 14:30:00"dt1.toSecsSinceEpoch();// 时间戳(秒)QDateTime::fromSecsSinceEpoch(1751868600);// 时间戳 → QDateTime容器类
// QList —— 有序列表(最常用)QList<int>list;list.append(1);list.append(2);list.append(3);list.at(0);// 1list.size();// 3list.contains(2);// truelist.removeAt(1);// 删除索引1的元素// QStringList —— 字符串列表(继承自 QList<QString>)QStringList sl;sl<<"张三"<<"李四"<<"王五";sl.append("赵六");sl.join(",");// "张三,李四,王五,赵六"sl.contains("李四");// truesl.sort();// 排序// QMap —— 有序键值对(按 key 排序)QMap<QString,int>map;map["语文"]=90;map["数学"]=95;map.insert("英语",88);map.keys();// ["语文", "数学", "英语"](有序)map.values();// [90, 95, 88]map.contains("数学");// true// QHash —— 无序键值对(查找更快)QHash<QString,int>hash;hash["语文"]=90;hash["数学"]=95;hash.keys();// 顺序不固定几何与图形类型
// QPoint / QPointF —— 点(整数 / 浮点)QPointp1(10,20);p1.x();// 10p1.y();// 20// QSize / QSizeF —— 尺寸QSizes1(100,200);s1.width();// 100s1.height();// 200// QRect / QRectF —— 矩形(x, y, width, height)QRectr1(10,20,100,200);r1.x();// 10r1.width();// 100r1.center();// QPoint(60, 120)r1.contains(QPoint(50,50));// true// QColor —— 颜色QColorc1("red");QColorc2(255,128,0);QColorc3("#FF8000");c1.red();// 255c1.green();// 0c1.blue();// 0c1.name();// "#ff0000"其他常用类型
| 类型 | 说明 | 示例 |
|---|---|---|
QUrl | URL 地址 | QUrl("https://qt.io") |
QSize | 尺寸(宽×高) | QSize(800, 600) |
QMargins | 四边边距 | QMargins(10, 5, 10, 5) |
QUuid | 全局唯一标识符 | QUuid::createUuid().toString() |
QRegExp/QRegularExpression | 正则表达式 | 字符串匹配与提取 |
QPair<T1, T2> | 二元组 | QPair<QString, int>("age", 20) |
使用建议
| 需求 | 推荐类型 |
|---|---|
| 存储文本 | QString |
| 存储二进制数据 | QByteArray |
| 存储单个字符 | QChar |
| 存储列表 | QList<T>/QStringList |
| 存储键值对 | QMap(有序)/QHash(高性能) |
| 存储不确定类型 | QVariant |
| 存储日期时间 | QDateTime |
| 跨平台整数 | qint32/qint64等 |
| 存储坐标/尺寸 | QPoint/QSize/QRect |
类型转换关系总览
int/double/bool↕QString::number()/toInt()/toDouble()QString ↕toUtf8()/fromUtf8()QByteArray ↕ 构造函数/toXxx()QVariant(万能容器,可装以上所有类型)基本覆盖了日常开发中 90% 以上的字符串操作场景。☀