QT常用类

五、常用类

  1. QString 字符串类(掌握)

QString是Qt的字符串类,与C++的std::string相比, 不再使用ASCII编码。QString使用的是Unicode编码

QString中每个字符都是一个16位的QChar,而不是8位的char。

QString完全支持中文,但是有序不同的技术可能会采用不同的中文编码。有时候也会遇到中文编码的一致性问题。

如果过后续出现中文乱码的问题。

从此乱码是路人

Qt中对C++的类进行重写是,充分考虑到C++程序员的编程习惯,因此QString几乎支持所有的std::string的API。除此之外也会新增一些函数。

// int → QString
// 参数1:要转化的数字
// 参数2:转换的进制
QString	number(int n, int base = 10)

// int → QString
// 参数1:要转换的数字
// 参数2:进制
// 返回值:转换后的QString
QString &	setNum(int n, int base = 10)

// QString → int
// 参数1:转换成功或失败,成功设置为true、失败参数设置为false
// 参数2:进制
// 返回值:转换后的int数值。转换失败返回0
int	toInt(bool * ok = 0, int base = 10) const

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QString str = "안녕하세요";

    // int -> QString 静态成员函数
    int a = 255;
    qDebug() << QString::number(a);
    qDebug() << QString::number(a,2);

    qDebug() << QString::number(a,16);
    qDebug() << QString::number(a,8);

    // int → QString 成员函数
    qDebug() << str.setNum(a);


    // QString -> int
    bool result = false;
    str = "hello";
    qDebug() << str.toInt(&result);
    qDebug() << result ;
}

Dialog::~Dialog()
{
    delete ui;
}

2、容器类

Qt重写了C++的STL中的容器类,相比较于C++STL的容器类,Qt的容器类更加轻巧,安全和易于使用。因为Qt的容器类进行了速度和存储化的优化,减少了可执行文件的生成体积,几乎全面兼容STL容器类的API接口。并且是线程安全的。可以同时被多个线程访问。

2.1 顺序容器——QList类(掌握)

本节课程内容使用QList类存储Student元素,Student是自定义C++类型,在Qt项目中创建个C++的类。

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

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

  1. 在弹出的窗口中输入类名(大驼峰/帕斯卡命名法)

  1. 在项目管理界面中点击”完成“。可以看到新的文件在项目中存在了。

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    // 创建QList对象
    QList<Student> lis;
    Student s1(1,"张三","挖掘机");
    Student s2(2,"李四","美容美发");
    Student s3(3,"王五","电气焊");
    Student s4(4,"赵六","新东方厨师");
    Student s5(5,"韩七","汽修");

    // 插入对象,向后插入元素(链式调用)
    lis << s1 << s2 << s3 << s4;

    // 插入
    lis.insert(1,s5);

    // 删除元素
    lis.removeFirst(); // 删除第一个
    lis.removeLast();  // 删除最后一个

    lis.removeAt(1);    // 删除第二个元素

//    lis.removeAll(s2); // 删除所有相同的元素
//    lis.removeOne(s4);  // 删除所有相同元素的第一个

    // 遍历
    for(int i = 0;i < lis.count();i++)
    {
        Student s = lis.at(i);
        qDebug() << s.getId() << s.getName() << s.getMajor() ;
    }

    // C++迭代器遍历
    for(QList<Student>::iterator iter = lis.begin(); iter != lis.end();iter++)
    {
        Student s = *iter;
        qDebug() << s.getId() << s.getName() << s.getMajor() ;
    }

    // Java迭代器
//    QListIterator<T>  // 只读迭代器
//    QMutableListIterator // 读写迭代器
    // 创建一个Java迭代器对象,参数为容器对象
    QListIterator<Student> iter(lis);
    while(iter.hasNext()) // 判断当前迭代器指针后面是否有可用元素
    {
        Student s = iter.next(); // 向后移动当前迭代器,并取出元素
        qDebug() << s.getId() << s.getName() << s.getMajor() ;
    }

}

Dialog::~Dialog()
{
    delete ui;
}

2.2 关联容器——QMap类(掌握)

重新实现了STL中std::map类,QMap也兼容map类的API,也增加一些新的Qt的API。

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    QMap<QString,QString> map; // 创建对象

    // 插入数据
    map.insert("张三","挖掘机");
    map.insert("冠芝","美容美发");
    map.insert("宵宾","电气焊");
    map.insert("极强","要饭");
    map.insert("昌平","捡破烂");
    map.insert("华子哥","抽华子");

    // 如果容器中的元素支持qDebug输出,则容器本身也支持输出。
    qDebug () << map;
    // 删除键值对
    // 返回值为删除的键值对数量
    qDebug() << map.remove("张三");
    qDebug() << map.remove("张三");

    // 判断某个键值对在不在
    qDebug() << map.contains("张三"); // false
    qDebug() << map.contains("冠芝"); // true

    if(map.contains("华子哥"))
    {
        map["华子哥"] = "抽电子烟";
    }
    qDebug () << map;

    qDebug() << map.value("张三","没有没有");
    qDebug() << map.value("极强","没有没有");

    // STL 迭代器遍历 C++
    for(QMap<QString,QString>::iterator iter = map.begin();
        iter != map.end(); iter++)
    {
        // 输出键与值
        qDebug() << iter.key() << iter.value();
    }

    // java 迭代器
    QMapIterator<QString,QString> iter(map);
    while(iter.hasNext())
    {
       iter.next();
       qDebug() << iter.key() << iter.value() ;
    }
}

Dialog::~Dialog()
{
    delete ui;
}

3、Qt数据类型(熟悉)

3.1 跨平台数据类型

Qt是一个跨平台的开发框架,所以必须要保证各个平台的数据类型长度保持一致,因此Qt对常见数据类型进行了新的定义符号。

在Qt环境下,可以直接使用。

3.2 QVariant 统一变量类

QVariant类型可以与Qt常见的类型完成相互转换,因此此类型的函数具有类似于多态的性质。

    qint64 a = 123;
    QVariant v(a);
    QString str = v.toString(); // 转换成字符串
    qDebug() << str ; // 字符串123

    v = str;
    int b = v.toInt(); // 转换成int
    qDebug() << b;      // 整型:123

4、时间与日期处理(掌握)

Qt中用QDate类处理日期,使用QTime类处理时间,使用QDateTime处理时间和日期。已QDateTime进行讲解。

需要注意的是,QDateTime的数据来自系统日期和时间,修改时间会影响到QDateTime的数据。

常用函数:

// 返回1970年1月1日00:00:00到现在的毫秒数
qint64 QDateTime::​currentMSecsSinceEpoch()[static]

1、时间戳作用,计算代码的运行时间

  1. 时间戳的其他作用。

可以使用时间戳作为随机数的种子,但是需要注意,我们计算机的随机数都是伪随机。不是真正的随机数。计算机中无法做到真正的随机数。

获取当前的日期和时间对象

// 返回一个包含当前日期和时间的QDateTime对象
QDateTime QDateTime::​currentDateTime()

秒:ss

// 拿到当前日期和时间的对象后,可以提取当前的日期和时间
// 格式化输出年月日,时分秒
QString QDateTime::​toString(const QString & format) const

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    qint64 start = QDateTime::currentMSecsSinceEpoch();
    ui->setupUi(this);
    qDebug() << QDateTime::currentMSecsSinceEpoch() - start ;

    // 使用时间戳作为随机数种子
    qsrand(start);
    // 生成随机数(1-100)
    qDebug() <<  qrand()%101;

    QDateTime dt = QDateTime::currentDateTime();
    qDebug() <<  dt.toString("yyyy年MM月dd日 hh时mm分ss秒");

}

Dialog::~Dialog()
{
    delete ui;
}

其他的日期和时间的相关ui组件:

5、定时器类QTimer(掌握)

QTimer类可以实现一个延时任务,周期任务。

QTimer的常用属性有:

  • active : const bool

当前定时器的运行状态

  • interval : int

时间间隔,单位毫秒。

  • singleShot : bool

表示当前当前定时器,是否是一次性的。

QTimer类的常用函数

// 构造函数 堆区开辟
QTimer::​QTimer(QObject * parent = 0)

QLCDNumber组件

使用这个组件,显示出11:56:24 这样子的效果。

//QLCDNumber 的显示槽函数
void	display(const QString & s)[slot]

// 定时器触发信号,时间到了就发送该信号
void QTimer::​timeout()[signal]

// 启动定时器
void QTimer::​start()[slot]

// 停止计时器
void QTimer::​stop()[slot]

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    timeOutSlot(); // 提前刷新显示控件
//    ui->lcdNumber->display("12:00:00");

    timer = new QTimer(this);
    // 设置定时器参数
    timer->setInterval(500);
    timer->setSingleShot(false);

    connect(timer,SIGNAL(timeout()),this,SLOT(timeOutSlot()));
    // 启动定时器
    timer->start();
}

Dialog::~Dialog()
{
    if(timer->isActive()) // 定时器状态
    {
        timer->stop();
    }
    delete timer;
    delete ui;
}

void Dialog::timeOutSlot()
{
    // 获取当前时间,并转换为:时:分:秒的QString字符串
    QString str = QDateTime::currentDateTime().toString("hh:mm:ss");
    ui->lcdNumber->display(str);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2、Web攻防-SQL注入-联合查询注入

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 声明&#xff1a;只用于学习交流&#xff0c;点到为止&#xff0c;请勿非法测试。 概念&#xff1a; 联合查询注入&#xff1a;联合注入是回显注入的一种&#xff0c;也就是说联合注入的前…

解决docker中运行的jar包连不上数据库

目录 数据库主机地址设置问题&#xff1a; 网络连接问题&#xff1a; 数据库端口映射&#xff1a; 数据库认证问题&#xff1a; 数据库服务是否正常运行&#xff1a; 日志查看&#xff1a; 如果在 Docker 中运行的 JAR 包无法连接到数据库&#xff0c;有几个可能的原因和…

「JavaSE」String类3:字符串常量池

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 字符串常量池 &#x1f349;常量池&#x1f349;字符串常量池&#x1f349;intern 方法 &#x1f349;常量池 在Java程序中&…

Docker 第十九章 : 阿里云个人镜像仓使用

Docker 第十九章 : 阿里云个人镜像仓使用 本章知识点: 如何创建镜像库,如何设置密码,如何登录与退出个人镜像仓,如何本地打镜像,如何将本地镜像推送到个人镜像库。 背景 在项目YapiDocker部署中,因读取mongo:latest 版本不一致,导致后续执行步骤的异常。遇到此场景…

document.cookie中expires 格式设置问题导致部分iphone safari上登录失效

一、问题描述 设备信息&#xff1a;iPhone 12, iOS 16.3 昨天有个小伙伴发现自己的iPhone safari打开网页登录时&#xff0c;登录页面显示登录成功&#xff0c;但实际进入首页后仍然显示未登录。多次测试&#xff0c;该问题在该设备上属于必现问题。 二、问题排查与解决 经过…

AI误导游戏——LLM的危险幻觉

在当今科技高速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为日常生活和工作中不可或缺的一部分。特别是大语言模型&#xff08;LLM&#xff09;如GPT-4等&#xff0c;它们的智能表现令人惊叹&#xff0c;广泛应用于文本生成、语言翻译、情感分析等多个领域…

easyrecovery数据恢复软件14中文绿色版下载

EasyRecovery易恢复14全面介绍 一、功能概览 EasyRecovery易恢复14是一款功能强大的数据恢复软件&#xff0c;旨在帮助用户从各种存储介质中恢复丢失或删除的文件。无论是由于误删、格式化、系统崩溃还是其他未知原因导致的数据丢失&#xff0c;EasyRecovery易恢复14都能提供…

二十九、图像的高斯双边模糊操作

项目功能实现&#xff1a;对一张图片进行高斯双边模糊操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 高斯双边模糊考虑的是图像的x、y方向和RGB方向&#xff0c;两个边 python版本可参考博文&#xff1a;八、边缘保留滤波(EPF) 一、头文件 bilateral_blur.h #pr…

虚 拟 化原理

1 概念&#xff1a; ①通俗理解&#xff1a; 虚拟化是在硬件和操作系统之间的实践 ②通过对计算机的服务层级的理解&#xff0c;理解虚拟化概念 抽离层级之间的依赖关系&#xff08;服务器虚拟化&#xff09; 2 虚拟化分类 ①按架构分类 ◆寄居架构&#xff1a;装在操作系统上…

文件操作知识点(下)

文件操作知识点&#xff08;上&#xff09;-CSDN博客 文件操作知识点(中&#xff09;-CSDN博客 本节继续复习文件操作的相关知识&#xff0c;收尾。 文件读取结束的判定 应该要牢记&#xff0c; 判断文件是否读取结束不要直接使用feof。 feof的作用是&#xff1a;当文件读取…

XSS原理和攻防

Cross Site Scripting:跨站脚本攻击 用户提交的数据中可以构造恶意代码&#xff0c;并且执行&#xff0c;从而实现窃取用户信息等攻击 攻击&#xff1a; 防御&#xff1a; 1.对输入进行过滤&#xff0c;对输出进行编码 2.cookie设置http-only

链表 删除链表中任意位置的节点

//删除链表中任意位置的节点 #include<stdio.h> #include <stdlib.h> struct Node {int data;struct Node* next; }; struct Node* head; void Insert(int x){Node* temp(Node*)malloc(sizeof(struct Node));//创建节点/*malloc返回指向起始地址的指针 因为malloc…

node 之 fs文件系统模块

1.什么是fs文件系统模块 fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对文件的操作需求 fs.readFile(),用来读取制定文件中的内容 fs.writeFile(),用来向制定的文件中写入内容 如果要在JavaScript代码中&#xff0c;使…

洛谷P8627 [蓝桥杯 2015 省 A] 饮料换购

#先看题目 题目描述 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料&#xff0c;凭 3 个瓶盖可以再换一瓶 C 型饮料&#xff0c;并且可以一直循环下去(但不允许暂借或赊账)。 请你计算一下&#xff0c;如果小明不浪费瓶盖&#xff0c;尽量地参加活动&#xff0c;那…

Linux学习方法-框架学习法——Linux应用程序编程框架

配套视频学习链接&#xff1a;https://www.bilibili.com/video/BV1HE411w7by?p4&vd_sourced488bc722b90657aaa06a1e8647eddfc 目录 Linux应用程序编程 Linux应用程序编程 Linux文件I/O(input/output) Linux文件I/O(五种I/O模型) Linux多进程 Linux多线程 网络通信(s…

Vue+SpringBoot打造社区买菜系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1.2 菜品分类模块2.1.3 菜品档案模块2.1.4 菜品订单模块2.1.5 菜品收藏模块2.1.6 收货地址模块 2.2 可行性分析2.3 用例分析2.4 实体类设计2.4.1 菜品分类模块2.4.2 菜品档案模块2.4.3…

Spring Boot与HikariCP:性能卓越的数据库连接池

点击下载《Spring Boot与HikariCP&#xff1a;性能卓越的数据库连接池》 1. 前言 本文将详细介绍Spring Boot中如何使用HikariCP作为数据库连接池&#xff0c;包括其工作原理、优势分析、配置步骤以及代码示例。通过本文&#xff0c;读者将能够轻松集成HikariCP到Spring Boot…

nginx-------------(四) 变量 日志分割 自定义图标 证书

一、高级配置 1 .1网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&#xff0c;在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module&#xff0c;否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机…

Linux运维-DHCP服务器

DHCP服务器的配置与管理 项目场景 学校各部门共有180台电脑&#xff0c;除了计算机学院的教师会配置电脑的网络连接&#xff0c;其他部门的老师和工作人员均不会&#xff0c;为了提高网络的管理效率&#xff0c;技术人员决定配置一台DHCP服务器&#xff0c;来提供动态的IP地址…

js---回溯算法

在 JavaScript 中实现回溯算法通常需要使用递归来进行搜索。回溯算法通常用于解决组合优化问题、排列组合问题、棋盘类游戏等。回溯算法一般是一个for加递归,for循环横向遍历,递归纵向遍历—以上是回溯算法的基本框架 1、回溯算法求数组所有子集 2、回溯算法求全排列