Qt_day5_常用类

常用类

目录

[1. QString 字符串类(掌握)](#1. QString 字符串类(掌握))

[2. 容器类(掌握)](#2. 容器类(掌握))

[2.1 顺序容器QList](#2.1 顺序容器QList)

[2.2 关联容器QMap](#2.2 关联容器QMap)

[3. 几种Qt数据类型(熟悉)](#3. 几种Qt数据类型(熟悉))

[3.1 跨平台数据类型](#3.1 跨平台数据类型)

[3.2 QVariant 统一数据类型](#3.2 QVariant 统一数据类型)

[3.3 QStringList 字符串列表](#3.3 QStringList 字符串列表)

[4. QDateTime 日期时间类(掌握)](#4. QDateTime 日期时间类(掌握))

[4.1 时间戳](#4.1 时间戳)

[4.2 生成随机数](#4.2 生成随机数)

[4.3 格式化](#4.3 格式化)

[5. QTimer 定时器类(掌握)](#5. QTimer 定时器类(掌握))


本章学习内容主要是一些开发中常用的类,这些类均不继承QWidget,没有可视化效果。

1. QString 字符串类(掌握)

QString是Qt字符串类型,采用Unicode编码,支持常见各国字符,因此一个字符是一个16位的QChar,而不是之前C++/C中8位的char,因此QString处理中文没有问题,且一个汉字算作一个字符。

QString支持C++中std::string常用的API,在此基础上又新增了Qt风格的API。

QString的API非常多,以下是常用API的相关词汇,需要做到英译汉的水平。

举几个函数讲解:

cpp 复制代码
// 数字 → QString
// 参数1:原数字
// 参数2:进制
// 返回值:转换后的QString
QString QString::​number(int n, int base = 10)        [sta
cpp 复制代码
// 数字 → QString
// 参数1:原数字
// 参数2:进制
// 返回值:转换后的QString,支持链式调用
QString &	setNum(int n, int base = 10)
cpp 复制代码
// QString → 数字
// 参数1:转换是否成功
// 参数2:进制
// 返回值:转换之后的数字,如果失败返回0
int	 toInt(bool * ok = 0, int base = 10) const

main.cpp

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;
}

2. 容器类(掌握)

2.1 顺序容器QList

Qt 的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储优化,因此可以减少可执行文件的大小。此外,它们还是线程安全的,也就是说它们作为只读容器时可被多个线程访问。

QList 是最常用的容器类,虽然它是以数组列表的形式实现的,但是在其前或后添加数据非常快,QList以下标索引的方式对数据项进行访问。

本节使用QList存储一个自定义C++类型的元素,以下是在Qt项目中创建一个C++类的操作步骤:

  1. 在Qt Creator中,选中项目名称,鼠标右键,点击"添加新文件"。

  2. 在弹出的窗口中,按照下图所示进行操作。

  1. 在弹出的窗口中定义类。
  1. 在项目管理界面,直接点击完成。可以在项目看到新创建类的头文件和源文件。
  1. 在使用时,只需要引入自定义类的头文件即可。

Qt新增Java风格的迭代器,与STL迭代器的对应关系如下:

通过网盘分享的文件:Day3_24072_QString.zip

链接: https://pan.baidu.com/s/1QhYSm9MDrAqrHxxRI9IJAA 提取码: pbez

--来自百度网盘超级会员v7的分享

2.2 关联容器QMap

同样QMap学习方式与QList几乎相同,也存在两种风格迭代器的对应关系。

main.cpp

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;
}

3. 几种Qt数据类型(熟悉)

后续一些API中可能出现以下几种数据类型。

3.1 跨平台数据类型

为了确保在各个平台上各数据类型都有统一确定的长度,Qt 为各种常见数据类型定义了类型符号。

3.2 QVariant 统一数据类型

QVariant可以把Qt中常见的数据类型统一化,即常见数据类型可以转换为QVarient对象(构造函数),QVariant对象也可以转换为常见数据类型。

cpp 复制代码
#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.3 QStringList 字符串列表

可等同于QList<QString>,会在部分API中出现。

4. QDateTime 日期时间类(掌握)

QDateTime类可以同时处理日期和时间,是QDate类(日期类)与QTime(时间类)类的合并。

4.1 时间戳

可以使用下面的函数获取时间戳。

cpp 复制代码
// 返回一个从1970-01-01 00:00:00到现在的毫秒数(格林威治时间)
qint64 QDateTime::​currentMSecsSinceEpoch()        [static]

可以在一段代码的前后分别调用此函数作差,简单估算代码运行时长。

4.2 生成随机数

可以使用上面的函数作为随机数种子,生成随机数。

需要注意随机数种子不能重复的问题,即不要使用同一个时间戳连续生成随机数。

4.3 格式化

格式化可以把日期和时间生成为制定格式的字符串,相关函数如下:

cpp 复制代码
// 获得一个包含当前时区日期时间数据的QDateTime对象,数据来源于本地系统时钟
QDateTime QDateTime::​currentDateTime()            [static]
cpp 复制代码
//  按照制定格式提取QDateTime内部的数据
// 参数:格式,见下表或自行查阅文档
// 返回值:符合格式的字符串
QString QDateTime::​toString(const QString & format) const

通过网盘分享的文件:Day4_24072_QDateTime.zip

链接: https://pan.baidu.com/s/1-LLVvM_ygJPbT2yndwQXAQ 提取码: w1nn

--来自百度网盘超级会员v7的分享

5. QTimer 定时器类(掌握)

QTimer类可以执行一个延时的任务或周期性任务。

常用属性如下:

  • active : const bool

定时器是否在运行,通过getter获取当前的运行状态。

  • interval : int

如果是一次性定时器,此属性表示延迟时间;如果是周期性定时器,此属性表示间隔时间,单位毫秒。

  • singleShot : bool

是否是一次性

相关函数如下:

cpp 复制代码
// 构造函数
QTimer::​QTimer(QObject * parent = 0)
cpp 复制代码
// 启动定时器,如果定时器已经运行,此函数会停止定时器运行并重新运行
void QTimer::​start()                    [slot]
cpp 复制代码
// 停止定时器
void QTimer::​stop()                    [slot]
cpp 复制代码
// 定时器触发时发射的信号
void QTimer::​timeout()                [signal]

项目源码:
通过网盘分享的文件:Day4_24072_QTimer.zip

链接: https://pan.baidu.com/s/17nGMC3fWBqn4uYWYTM_8HA 提取码: aj4a

--来自百度网盘超级会员v7的分享

相关推荐
Ajiang28247353041 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空1 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----6 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024066 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it6 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海7 小时前
scala String
大数据·开发语言·scala