QString 字符串类
一、 QString
QString是Qt字符串类型,采用Unicode编码,支持常见各国字符,因此一个字符是一个16位的QChar,而不是之前C++/C中8位的char,因此QString处理中文没有问题,且一个汉字算作一个字符。
QString支持C++中std::string常用的API,在此基础上又新增了Qt风格的API。
QString的API非常多,以下是常用API的相关词汇,需要做到英译汉的水平。
举几个函数讲解:
// 数字 → QString
// 参数1:原数字
// 参数2:进制
// 返回值:转换后的QString
QString QString::number(int n, int base = 10) [static
// 数字 → QString
// 参数1:原数字
// 参数2:进制
// 返回值:转换后的QString,支持链式调用
QString & setNum(int n, int base = 10)
// QString → 数字
// 参数1:转换是否成功
// 参数2:进制
// 返回值:转换之后的数字,如果失败返回0
int toInt(bool * ok = 0, int base = 10) const
main.cpp
#include "dialog.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString str = "你好こんにちは";
qDebug() << str;
qDebug() << str.size() << endl;
// 把十进制的36转换为37进制
int i = 36;
QString text = QString::number(i,37);
qDebug() << text;
i = 255;
// 链式调用
qDebug() << text.setNum(i,16).append("哈哈").prepend("转换结果:");
bool result;
// QString → int
text = "0";
i = text.toInt(&result);
qDebug() << i; // 0
qDebug() << result; // true
text = "56834cvgfgf";
i = text.toInt(&result);
qDebug() << i; // 0
qDebug() << result; // false
return 0;
}
二、 容器类
1. 顺序容器QList
Qt 的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储优化,因此可以减少可执行文件的大小。此外,它们还是线程安全的,也就是说它们作为只读容器时可被多个线程访问。QList 是最常用的容器类,虽然它是以数组列表的形式实现的,但是在其前或后添加数据非常快,QList以下标索引的方式对数据项进行访问。
2 .关联容器QMap
同样QMap学习方式与QList几乎相同,也存在两种风格迭代器的对应关系。
main.cpp
#include <QDebug>
#include <QMap>
int main()
{
QMap<QString,QString> ma; // 创建对象
// 添加数据
ma["姓名"] = "张三";
ma["姓名"] = "李四"; // 因为键已经存在,因此变为修改
qDebug() << ma;
ma.insert("职业","销售");
ma.insert("职业","码农"); // 因为键已经存在,因此变为修改
qDebug() << ma;
// 判断键有没有
if(ma.contains("姓名"))
{
qDebug() << "有这个键";
}else
qDebug() << "没这个键";
// 取出对应的值
// 参数1:键
// 参数2:默认值
qDebug() << ma.value("职业","待业");
qDebug() << ma.value("学历","小学");
// 删除键值对
int result = ma.remove("职业2");
if(result)
{
qDebug() << "删除成功!";
}else
{
qDebug() << "删除失败!";
}
// STL 遍历
for(QMap<QString,QString>::iterator iter = ma.begin();
iter != ma.end();iter++)
{
// 通过迭代器取出键和值
qDebug() << iter.key() << iter.value();
}
// Java 遍历
QMutableMapIterator<QString,QString> iter(ma);
while(iter.hasNext())
{
iter.next(); // 向后移动
qDebug() << iter.key() << iter.value(); // 取出
}
return 0;
}
三、几种Qt数据类型
1.跨平台数据类型
为了确保在各个平台上各数据类型都有统一确定的长度,Qt 为各种常见数据类型定义了类型符号。
2 QVariant 统一数据类型
QVariant可以把Qt中常见的数据类型统一化,即常见数据类型可以转换为QVarient对象(构造函数),QVariant对象也可以转换为常见数据类型。
#include <QDebug>
int main()
{
// 甚至可以借助QVariant进行数据转换
int a = 12;
QVariant v(a);
QString text = v.toString();
qDebug() << text;
QVariant v2(text);
QStringList lis = v2.toStringList();
qDebug() << lis;
return 0;
}
3 .QStringList 字符串列表
可等同于QList<QString>,会在部分API中出现。
四、QDateTime 日期时间类
QDateTime类可以同时处理日期和时间,是QDate类(日期类)与QTime(时间类)类的合并。
1 .时间戳
可以使用下面的函数获取时间戳。
// 返回一个从1970-01-01 00:00:00到现在的毫秒数(格林威治时间)
qint64 QDateTime::currentMSecsSinceEpoch() [static]
2. 生成随机数
可以使用上面的函数作为随机数种子,生成随机数。
需要注意随机数种子不能重复的问题,即不要使用同一个时间戳连续生成随机数。
3. 格式化
格式化可以把日期和时间生成为制定格式的字符串,相关函数如下:
// 获得一个包含当前时区日期时间数据的QDateTime对象,数据来源于本地系统时钟
QDateTime QDateTime::currentDateTime() [static
// 按照制定格式提取QDateTime内部的数据
// 参数:格式,见下表或自行查阅文档
// 返回值:符合格式的字符串
QString QDateTime::toString(const QString & format) cons
五、QTimer 定时器类(掌握)
QTimer类可以执行一个延时的任务或周期性任务。
常用属性如下:
- active : const bool
定时器是否在运行,通过getter获取当前的运行状态。
- interval : int
如果是一次性定时器,此属性表示延迟时间;如果是周期性定时器,此属性表示间隔时间,单位毫秒。
- singleShot : bool
是否是一次性
相关函数如下:
构造函数
QTimer::QTimer(QObject * parent = 0)
// 启动定时器,如果定时器已经运行,此函数会停止定时器运行并重新运行
void QTimer::start() [slot]
// 停止定时器
void QTimer::stop() [slot]v
// 定时器触发时发射的信号
void QTimer::timeout() [signal]
原文地址:https://blog.csdn.net/weixin_63207763/article/details/143023863
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!