自学内容网 自学内容网

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)!