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

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

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

相关文章

动态预测波动率:ARCH模型和Heston模型

制定符合需要的资产组合需要了解每支的波动率&#xff0c;波动率高的资产意味着价格波动大&#xff0c;风险高&#xff0c;为了降低资产组合的风险&#xff0c;通常会在波动率较低的资产中分配更多的资金。同时波动率也和市场参与者的情绪有关&#xff0c;波动率大&#xff0c;…

【算法与数据结构】684、685、LeetCode冗余连接I II

文章目录 一、684、冗余连接 I二、685、冗余连接 II三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、684、冗余连接 I 思路分析&#xff1a;题目给出一个无向有环图&#xff0c;要求去掉一个边以后构成一个树&#xf…

如何在VSCode中带有参数的Debug(name、program、$file、args、pickArgs、指定虚拟环境)

0. 省流 {"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","cons…

如何改变.net托管的入口main函数

有小伙伴问: .NET托管入口Main函数可以修改成别的函数&#xff0c;用来作为程序的入口吗&#xff1f; 答案&#xff1a;当然是可以的。这也算是.NET里面非常简单的骚操了。本篇来用最新的.NET8演示下&#xff0c;如何修改Main入口。 1.简单控制台例子&#xff1a; namespace…

美国硅谷大带宽服务器|大带宽服务器租赁贵吗?

在数字化时代&#xff0c;服务器成为了支撑各种在线业务和应用程序的重要基石。尤其对于那些需要处理大量数据、保证快速响应和稳定连接的企业或个人来说&#xff0c;大带宽服务器成为了不可或缺的选择。而美国硅谷&#xff0c;作为全球科技创新的摇篮&#xff0c;其服务器租赁…

Open CASCADE学习|绘制砂轮

今天绘制一个砂轮&#xff0c;其轮廓由两条直线段和两段圆弧构成&#xff0c;圆弧分别与直线相切&#xff0c;两条圆弧之间相交而非相切。建模思路是&#xff1a;先给定两条直线段的起始点及长度&#xff0c;画出直线段&#xff0c;然后给定其中一圆弧的半径及圆心角&#xff0…

python程序设计基础:字符串与正则表达式

第四章&#xff1a;字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII&#xff0c;仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码&#xff0c;最多只能表示256个符号。 随着信息技…

【新手易错点】golang中byte和rune

1 总体区别 在Golang中&#xff0c;byte和rune是两种不同类型的数据。简单来说&#xff0c;byte是一个8位的无符号整数类型&#xff0c;而rune则是一个32位的Unicode字符类型。 Byte: 在Golang中&#xff0c;byte类型实际上是uint8的别名&#xff0c;它用来表示8位的无符号整…

flutter使用getx实现路由跳转,页面没有执行dispose

我们看一下flutter的StatefulWidget组件的生命周期&#xff1a; createState&#xff1a; 当一个StatefulWidget插入到渲染树结构、或者从渲染树结构移除时&#xff0c;都会调用StatefulWidget.createState方法&#xff0c;从而达到更新UI的效果&#xff1b; initState&#…

【刷题记录】链表的回文结构

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.题目链接&#xff1a; LINK 2.详解思路&#xff1a; 思路&#xff1a;思路&#xff1a;先找到中间节点&#xff0c;然后逆置后半部分链表&#xff0c;一个指针指向链表的头节点&#xff0c;再一个指针指向逆置的头…

怎么在wifi中实现手机和电脑文件互传

有时我们想手机电脑文件互传&#xff0c;数据线却不在身边&#xff0c;这时我们可以用MiXplorer来实现wifi中手机和电脑互相访问文件。 MiXplorer是一款来自著名安卓开发者论坛XDA的作品&#xff0c;免费且功能强大&#xff0c;被很多人誉为是“全能文件管理器”。 1.在手机上…

Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具

下载地址&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…

进程线程通信-day6

1、将信号和消息队列的课堂代码敲一遍 //发送端 #include<myhead.h>//定义一个消息结构类型 struct msgbuf {long mtype;char mtext[1024]; }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const…

CSS实现半边边框(只有边框的部分可见)

CSS实现半边边框&#xff08;只有边框的部分可见&#xff09; <div class"part box"><h1>内容</h1><!-- 绘出下面两个对角边框--><div class"part-footer"></div> </div>主要代码 .box {width: 100px;height:…

cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决

日常项目开发中。需要对qt5升级到qt6 做cmake兼容配置&#xff0c;在编译中发现&#xff0c;有c 编译环境 报错 2>C:\Qt\6.5.3\msvc2019_64\include\QtCore/qcompilerdetection.h(1226,1): fatal error C1189: #error: "Qt requires a C17 compiler, and a suitable …

ChatGPT的增长已经进入了瓶颈期

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue3自定义组件v-model双向绑定

无能吐槽一下&#xff0c;虽然用了很多遍v-model&#xff0c;但是还是不得要领&#xff0c;每次看官网都感觉说的不是很清晰&#xff0c;在写的时候还是要查看文档&#xff0c;可能就是不理解原理&#xff0c;这次特意好好写一篇文章&#xff0c;让自己好好理解一下。 自定义一…

React18源码: React调度中的3种优先级类型和Lane的位运算

优先级类型 React内部对于优先级的管理&#xff0c;贯穿运作流程的4个阶段&#xff08;从输入到输出&#xff09;&#xff0c;根据其功能的不同&#xff0c;可以分为3种类型&#xff1a; 1 &#xff09;fiber优先级(LanePriority) 位于 react-reconciler包&#xff0c;也就是L…

HarmonyOS Stage模型 应用配置文件讲解

好&#xff0c;上文 HarmonyOS Stage模型基本概念讲解 中&#xff0c;我们简单讲解了HarmonyOS 中 Stage模型的基本概念 那么 我们继续学习Stage模型的相关知识 上文之后 我们肯定对它的概念和基本结构 有了一个了解 那么 我们就来看一下 基于Stage模型 它里面一些基本的配置文…

FPGA领域顶级学术会议

FPGA领域顶级学术会议主要有FPGA,FCCM,FPL和FPT。 1 FPGA 会议全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 网站是:https://dl.acm.org/conference/fpga FPGA常年在美国举办,每年2月,偏FPGA基础研究; 该会议的论文免费下载。这个比…