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.mzph.cn/news/886184.shtml

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

相关文章

VBA学习笔记:基础知识

1.打开编辑器 工具-选项&#xff0c;可设置编辑器字体大小等 2. 运行 快捷键F5&#xff0c;或 运行-运行宏 若提示宏被禁止&#xff0c;解决办法之一&#xff1a;工具-宏-安全性-安全级-中&#xff0c;关闭excel重新打开&#xff0c;启用宏 保存文件格式为xla或xlam 3. 基本…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法&#xff1a;参数说明&#xff1a;返回值&#xff1a;使用示例&#xff1a;示例代码&#xff1a; 说明&#xff1a; 前言 有时候使用的时候&a…

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习&#xff0c;处处可用。 一切皆数据 Nu 管道使用结构化数据&#xff0c;你可以用同样的方式安全地选择&#xff0c;过滤和排序。停止解析字符串&#xff0c;开始解决问题。 强大的插件系统 具备强…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

ECharts图表图例8

用eclipse软件制作动态单仪表图 用java知识点 代码截图&#xff1a;

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题&#xff0c;使用文档来指导故障排除工作&#xff0c;确定具体的网络问题&#xff0c;实施…

读取文件内容、修改文件内容、识别文件夹目录(Web操作系统文件/文件夹详解)

前言 因 Unicode IDE 编辑器导入文件、文件夹需要&#xff0c;研究了下导入文件/文件夹的功能实现&#xff0c;发现目前相关文章有点少&#xff0c;故而记录下过程&#xff0c;如果有误&#xff0c;还望指正。(API的兼容性及相关属性、接口定义&#xff0c;请自行查看文件系统 …

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的&#xff0c;但是本地的虚拟机、物理服务器等网络环境不好的情况&#xff0c;是无法访问docker-hub的&#xff0c;即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows&#xff0c;下载docker images后&#xf…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…

HBuilder(uniapp) 配置android模拟器

HBuilder&#xff08;uniapp&#xff09; 配置android模拟器 选择完成之后&#xff0c;点击ok&#xff0c;再次点击Configure—》AVD Manager

flutter插件:录制系统播放的声音

该插件基于flutter包 flutter_screen_recording 和 github库 SystemAudioCaptureAndroid&#xff0c;实现了在安卓手机上录制系统播放声音的功能&#xff0c;也就是说&#xff0c;只要一个安卓应用没有设置不允许其它应用录制声音&#xff0c;该插件可以录制该应用播放的声音。…

Mac中安装OhMyZsh

Mac中安装OhMyZsh 文章目录 Mac中安装OhMyZsh一、Homebrew二、OhMyZsh1、Oh-My-Zsh配置1.1&#xff1a;主题配置1.2&#xff1a;插件配置&#xff08;语法高亮和自动提示&#xff09;1、zsh-autosuggestions&#xff08;需下载安装&#xff09;&#xff1a;高亮显示所有支持的命…

生信:TCGA学习(R、RStudio安装与下载、常用语法与常用快捷键)

前置环境 macOS系统&#xff0c;已安装homebrew且会相关命令。 近期在整理草稿区&#xff0c;所以放出该贴。 R语言、RStudio、R包安装 R语言安装 brew install rRStudio安装 官网地址&#xff1a;https://posit.co/download/rstudio-desktop/ R包下载 注意R语言环境自带…

elementUI input 禁止内容两端存在空格,或者是自动去除两端空格

需求 项目中有需求&#xff1a;输入框中禁止内容两端存在空格&#xff0c;或者是自动去除两端空格。 解决方法 vue的api文档中有过介绍&#xff0c;使用.trim可以去掉用户输入内容中两端的空格&#xff0c;如下图 代码 <el-input v-model.trim"name" cleara…

flink同步mysql数据表到pg库

1.关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld systemctl status firewalldvi /etc/selinux/config 修改为disabled2.安装java8 yum list java-1.8* yum install java-1.8.0-openjdk* -yjava -version3.下载和部署postgresql 下载地址&#…