Qt_day5_常用类

常用类

目录

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 → inttext = "0";i = text.toInt(&result);qDebug() << i; // 0qDebug() << result; // truetext = "56834cvgfgf";i = text.toInt(&result);qDebug() << i; // 0qDebug() << result; // falsereturn 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() << "有这个键";}elseqDebug() << "没这个键";// 取出对应的值// 参数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.rhkb.cn/news/468983.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【THM】linux取证 DisGruntled

目录 0x00 房间介绍 0x01 连接并简单排查 0x02 让我们看看做没做坏事 0x03 炸弹已埋下。但何时何地&#xff1f; 0x04 收尾 0x05 结论 0x00 房间介绍 嘿&#xff0c;孩子&#xff01;太好了&#xff0c;你来了&#xff01; 不知道您是否看过这则新闻&#xff0c;我…

MFC中Excel的导入以及使用步骤

参考地址 在需要对EXCEL表进行操作的类中添加以下头文件&#xff1a;若出现大量错误将其放入stdafx.h中 #include "resource.h" // 主符号 #include "CWorkbook.h" //单个工作簿 #include "CRange.h" //区域类&#xff0c;对Excel大…

智能化温室大棚控制系统设计(论文+源码)

1 系统的功能及方案设计 本次智能化温室大棚控制系统的设计其系统整体结构如图2.1所示&#xff0c;整个系统在器件上包括了主控制器STC89C52&#xff0c;温湿度传感器DHT11&#xff0c;LCD1602液晶&#xff0c;继电器&#xff0c;CO2传感器&#xff0c;光敏电阻&#xff0c;按…

一篇文章教会你使用Linux的‘sed‘基础命令

Linux sed 命令详解 Linux sed 命令详解1、基本语法2、常用命令2.1 替换2.2 删除行2.3 查找并打印行2.4 插入与追加2.5 多命令组合 3、高级用法3.1 替换并保存结果到新文件3.2 在范围内替换3.3 正则表达式匹配 4、小结 Linux sed 命令详解 sed 是 Linux 系统中非常强大的流编辑…

集群化消息服务解决方案

目录 集群化消息服务解决方案项目概述架构图使用说明服务端通过API接口推送消息给客户端调用方式 请求参数返回参数 客户端推送消息连接websocket或发送消息 接收消息项目地址作者信息 集群化消息服务解决方案 项目概述 集群化消息服务解决方案是一种用于处理大量消息的高可用…

elementUI 点击弹出时间 date-picker

elementUI的日期组件&#xff0c;有完整的UI样式及弹窗&#xff0c;但是我的页面不要它的UI样式&#xff0c;点击的时候却要弹出类似的日期选择器&#xff0c;那怎么办呢&#xff1f; 以下是elementUI自带的UI风格&#xff0c;一定要一个输入框来触发。 这是我的项目中要用到的…

【go从零单排】go中的三种数据类型array、slices、maps

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 array数组 package mainimport "fmt"func main() {var a [5]int //var关键字定义数组&#xff0c;[5]表…

科技改变阅读习惯:最新研究揭示电子阅读器的普及趋势

据QYResearch调研团队最新报告“全球电子阅读器市场报告2023-2029”显示&#xff0c;预计2029年全球电子阅读器市场规模将达到6.9亿美元&#xff0c;未来几年年复合增长率CAGR为0.4%。 如上图表/数据&#xff0c;摘自QYResearch最新报告“全球电子阅读器市场研究报告2023-2029.…

解决 VSCode 中 C/C++ 编码乱码问题的两种方法

解决 VSCode 中 C/C 编码乱码问题的两种方法 在中国地区&#xff0c;Windows 系统中的 cmd 和 PowerShell 默认编码是 GBK&#xff0c;但 VSCode 默认使用 UTF-8 编码。这种编码不一致会导致在 VSCode 终端中运行 C/C 程序时出现乱码。以下介绍两种方法来解决这一问题。 方法…

UE5遇到问题记录

问题描述&#xff1a; 在让敌人自动追踪玩家的时候一开始运行就会播放攻击的动画 解决方法&#xff1a; 这样是因为敌人一开始就检测到自己了&#xff0c;所以触发动画。 方式一&#xff1a;加一个条件 方式二&#xff1a;改一下碰撞预设

内网对抗-信息收集篇SPN扫描DC定位角色区域定性服务探针安全防护凭据获取

知识点&#xff1a; 1、信息收集篇-网络架构-出网&角色&服务&成员 2、信息收集篇-安全防护-杀毒&防火墙&流量监控 3、信息收集篇-密码凭据-系统&工具&网站&网络域渗透的信息收集&#xff1a; 在攻防演练中&#xff0c;当完成边界突破后进入内…

基于Matlab 疲劳驾驶检测

Matlab 疲劳驾驶检测 课题介绍 该课题为基于眼部和嘴部的疲劳驾驶检测。带有一个人机交互界面GUI&#xff0c;通过输入视频&#xff0c;分帧&#xff0c;定位眼睛和嘴巴&#xff0c;通过眼睛和嘴巴的张合度&#xff0c;来判别是否疲劳。 二、操作步骤 第一步&#xff1a;最…

11.11 代码块

一 java 1.代码块 1&#xff09; 理解 使用构造器时&#xff1a;先默认 调用代码块内容 再调用 构造器内容【代码块 > 构造器】 1.1 细节 1&#xff09;静态代码块 只能加载一次 2&#xff09;先调用父类代码块 再子类代码块 3&#xff09;静态代码块是随着类加载而执行…

在gitlab,把新分支替换成master分支

1、备份master分支&#xff0c;可以打tag 2、删除master分支 正常情况下&#xff0c;master分支不允许删除&#xff0c;需要做两个操作才能删除 a、变更项目默认分支为非master分支&#xff0c;可以先随便选择 b、取消master为非保护分支 操作了上述两步&#xff0c;就可以删…

在使用element中的抽屉<el-drawer>页签<el-tabs/>组合时,echarts图表宽度显示异常问题

类似这种情况&#xff0c;宽度异常 原因&#xff1a;在展示出抽屉时&#xff0c;图表的组件一件初始化了&#xff0c;导致他的宽度提前设定好了&#xff08;我默认的style"width: 100%; height: 300px;"&#xff09;&#xff0c;我得解决方法有2个&#xff1a; 1、第…

《大模型应用开发极简入门》笔记

推荐序 可略过不看。 初识GPT-4和ChatGPT LLM概述 NLP的目标是让计算机能够处理自然语言文本&#xff0c;涉及诸多任务&#xff1a; 文本分类&#xff1a;将输入文本归为预定义的类别。自动翻译&#xff1a;将文本从一种语言自动翻译成另一种语言&#xff0c;包括程序语言。…

Unicode字符集(万国码)

1.三种编码方式&#xff1a; UTF-16&#xff1a;16个bit位&#xff08;2个字节&#xff09;存储 UTF-32&#xff1a;32个bit位&#xff08;4个字节&#xff09;存储 UTF-8&#xff1a;可变长度字符编码。1-4个字节存储&#xff0c;只需记住&#xff1a;英文字母1个字节表示&…

支持 Win10 的网络环境模拟(丢包,延迟,带宽)

升级 Windows 10 以后&#xff0c;原来各种网络模拟软件都挂掉了&#xff0c;目前能用的就是只有 clumsy&#xff1a; 唯一问题是不支持模拟带宽&#xff0c;那么平时要模拟一些糟糕的网络情况的话&#xff0c;是不太方便的&#xff0c;而开虚拟机用 Linux tc 或者设置个远程 l…

【Homework】【5】Learning resources for DQ Robotics in MATLAB

Lesson 5 代码-TwoDofPlanarRobot.m 表示一个 2 自由度平面机器人。该类包含构造函数、计算正向运动学模型的函数、计算平移雅可比矩阵的函数&#xff0c;以及在二维空间中绘制机器人的函数。 classdef TwoDofPlanarRobot%TwoDofPlanarRobot - 表示一个 2 自由度平面机器人类…

在模方置平建筑失败的原因是什么?

在模方置平建筑失败的原因是什么&#xff1f; 可能是obj拓扑不连续&#xff0c;可以在网格大师使用osgb转obj功能&#xff0c;选择拓扑或者重建。 网格大师是一款能够解决实景三维模型空间参考、原点、瓦块大小不统一&#xff0c;重叠区域处理问题的工具“百宝箱”&#xff0c…