Qt_day5_常用类

news2025/2/22 19:22:19

常用类

目录

1. QString 字符串类(掌握)

2. 容器类(掌握)

2.1 顺序容器QList

2.2 关联容器QMap

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

3.1 跨平台数据类型

3.2 QVariant 统一数据类型

3.3 QStringList 字符串列表

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

4.1 时间戳

4.2 生成随机数

4.3 格式化

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的相关词汇,需要做到英译汉的水平。

举几个函数讲解:

// 数字 → QString
// 参数1:原数字
// 参数2:进制
// 返回值:转换后的QString
QString QString::​number(int n, int base = 10)        [sta
// 数字 → 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;
}

2. 容器类(掌握)

2.1 顺序容器QList

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

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

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

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

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

3. 在弹出的窗口中定义类。

4. 在项目管理界面,直接点击完成。可以在项目看到新创建类的头文件和源文件。

5. 在使用时,只需要引入自定义类的头文件即可。

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

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

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

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

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

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

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

3.1 跨平台数据类型

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

3.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.3 QStringList 字符串列表

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

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

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

4.1 时间戳

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

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

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

4.2 生成随机数

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

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

4.3 格式化

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

// 获得一个包含当前时区日期时间数据的QDateTime对象,数据来源于本地系统时钟
QDateTime QDateTime::​currentDateTime()            [static]
//  按照制定格式提取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

是否是一次性

相关函数如下:

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

项目源码:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HashMap的put流程知道吗

HashMap 的 put 方法算是 HashMap 中比较核心的功能了&#xff0c;复杂程度高但是算法巧妙&#xff0c;同时在上一版本的基础之上优化了存储结构&#xff0c;从链表逐步进化成了红黑树&#xff0c;以满足存取性能上的需要。本文逐行分析了 put 方法的执行流程&#xff0c;重点放…

鸿蒙UI开发——实现环形文字

1、背 景 有朋友提问&#xff1a;您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么&#xff0c;还是需要通过其他方式来实现。 针对这位粉丝朋友的提问&#xff0c;我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…

保存pytest的执行日志;在日志中显示当前是第几次执行

1、在本地保存执行日志&#xff1a; 在终端中执行时因为指定了-s参数&#xff0c;所以会打印相关信息&#xff0c;可以帮助我们后续定位问题&#xff1a; 但是显示在终端时后面无法查看&#xff0c;所以需要把执行日志保存在本地&#xff0c;使用tee 或 重定向符号>&#x…

2024年8个最佳在线websocket调试工具选择

精选了 8 款功能强大且易于使用的 WebSocket 测试工具&#xff1a; 工具名称支持的系统是否免费ApifoxWindows, Mac, Linux是WebSocket KingWindows, Mac, Linux是PostmanWindows, Mac, Linux是Socket.IO Test ClientWindows, Mac, Linux是InsomniaWindows, Mac, Linux是Wires…

H5流媒体播放器EasyPlayer.js播放器wasm编译打包之后报uncaught referenceErro的原因排查

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

初识算法 · 位运算(2)

目录 前言&#xff1a; 判定字符是否唯一 丢失的数字 比特位计数 只出现一次的数字III 前言&#xff1a; ​本文的主题是位运算&#xff0c;通过四道题目讲解&#xff0c;一道是判断字符是否唯一&#xff0c;一道是只出现一次的数字III&#xff0c;一道是比特位计数&…

丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍

丹摩DAMODEL&#xff5c;让AI开发更简单&#xff01;算力租赁上丹摩&#xff01; 目录 一、引言 二、丹摩智算平台概述 &#xff08;一&#xff09;平台架构 &#xff08;二&#xff09;平台特点 三、服务器虚拟化基础 &#xff08;一&#xff09;虚拟化的概念 &#xf…

[Docker#6] 镜像 | 常用命令 | 迁移镜像 | 压缩与共享

目录 Docker 镜像是什么 生活案例 为什么需要镜像 镜像命令详解 实验 1.一些操作 1. 遍历查看镜像 2. 查看镜像仓库在本地的存储信息 进入镜像存储目录 查看 repositories.json 文件 3. 镜像过滤 4. 下载镜像时的分层 实战一&#xff1a;离线迁移镜像 实战二&…

信用租赁系统的灵活配置与智能化管理助力租赁市场发展

内容概要 在现代租赁市场中&#xff0c;信用租赁系统就像一把金钥匙&#xff0c;打开了灵活配置与智能化管理的大门。首先&#xff0c;让我们看看它是如何运作的。这个系统允许用户根据自身需求自定义设备类型和信用分比例&#xff0c;不同租赁形式的选择使得整个过程更加个性…

Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

游戏引擎学习第四天

视频参考:https://www.bilibili.com/video/BV1aDmqYnEnc/ BitBlt 是 Windows GDI&#xff08;图形设备接口&#xff09;中的一个函数&#xff0c;用于在设备上下文&#xff08;device context, DC&#xff09;之间复制位图数据。BitBlt 的主要用途是将一个图像区域从一个地方复…

OpenGL ES 文字渲染进阶--渲染中文字体

旧文 OpenGL ES 文字渲染方式有几种? 一文中分别介绍了 OpenGL 利用 Canvas 和 FreeType 绘制文字的方法。 无论采用哪种方式进行渲染,本质上原理都是纹理贴图:将带有文字的图像上传到纹理,然后进行贴图。 渲染中文字体 利用 Canvas 绘制中文字体和绘制其他字体在操作方式上…

T265相机双目鱼眼+imu联合标定(全记录)

最近工作用到t265&#xff0c;记录一遍标定过程 1.安装驱动 首先安装realsense驱动&#xff0c;因为笔者之前使用过d435i&#xff0c;装的librealsense版本为2.55.1&#xff0c;直接使用t265会出现找不到设备的问题&#xff0c;经查阅发现是因为realsense在2.53.1后就不再支持…

python数据分析|二 IPython和JupyterNotebooks

一 python 解释器 Python解释器同一时间只能运行一个程序的一条语句。 如何适用&#xff1a; win r cmd 要退出Python解释器返回终端&#xff0c;可以输入 exit() 或 Ctrl-D。 假设创建了一个 hello_world.py 文件&#xff0c;它的内容是&#xff1a; 可以用下面的命令运…

集群聊天服务器(2)Json介绍

目录 Json序列化Json反序列化 大家之间交流用json&#xff0c;想要发送数据&#xff0c;就把数据序列化成json,想要接收数据&#xff0c;就反序列化成自己程序的语言。 Json序列化 可以直接赋值一个容器对象 js[‘xx’]vec; #include "json.hpp" using jsonnlohman…

ES信息防泄漏:策略与实践

Elasticsearch(简称ES)作为一个开源的搜索和分析引擎&#xff0c;在实时搜索和分析大量数据方面发挥着重要作用。然而&#xff0c;随着数据的增长&#xff0c;ES的信息安全和隐私保护成为了关键问题。信息防泄漏对于ES来说至关重要&#xff0c;它不仅关乎数据的完整性&#xff…

NVR批量管理软件/平台EasyNVR多个NVR同时管理使用时需要开放的端口

随着科技的飞速发展&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为维护安全、提升效率的重要工具。为了更有效地管理和利用这些宝贵的视频资源&#xff0c;视频联网与整合技术应运而生&#xff0c;旨在打破地域与设备限制&#xff0c;实现视频资源的实时共享与…

设计模式(四)装饰器模式与命令模式

一、装饰器模式 1、意图 动态增加功能&#xff0c;相比于继承更加灵活 2、类图 Component(VisualComponent)&#xff1a;定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。ConcreteComponent(TextView)&#xff1a;定义一个对象&#xff0c;可以给这个对象添加一…

PL/SQL执行.sql文件

1.编写.sql文件&#xff0c;创建update.sql文件&#xff0c;文件如下&#xff1a; set feedback offset define off--更新表中所有人的年龄update a set age18;prompt Done. 2.打开plsql选择命令窗口&#xff0c;即选择File->New->Command Window&#xff1b; 打开后的…

改扩配系列:浪潮英政服务器CS5280H2、IR5280H2——板载前置3.5寸*12口背板

机器配置情况 机器是云产品原厂配置的超融合一体机3.5*12背板出厂接法&#xff0c;前置是硬盘背板作为超融合数据盘是直通的&#xff0c;使用板载接口没有过raid卡。 主板上的接口既是pcie转接卡的接口&#xff0c;又是sata控制器的接口&#xff0c;如果是nvme_ssd我能理解&am…