Qt中的一些常用类

2023-10-27

目录

1. QString 字符串类

2. 容器类

        2.1 QList

        2.2 QMap

3. 跨平台数据类型

4. 时间和日期处理 

5. QTimer 定时器类


1. QString 字符串类

QString是Qt中的字符串类,使用Unicode编码,而不是ASCII码。在C++中字符使用8位的char类型表示一个字符,但是在Qt中使用16位的QChar表示一个字符。因此Qt处理中文没有任何问题,并且一个汉字算作一个字符。

QString类整体使用与std::string类似,但是在API上有所不同。

常用函数如下:

● QString QString::number(int n, int base = 10) [static]

数字→字符串

参数1:要转换的数字

参数2:进制

● QString & QString::setNum(int n, int base = 10)

数字→字符串,支持链式调用

参数1:要转换的数字

参数2:进制

● int QString::toInt(bool * ok = 0, int base = 10) const

字符串→数字

参数1:转换的结果,成功或失败

参数2:进制

返回值:转换的结果,数字;如果失败,返回0。

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
 
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
 
    QString str = "你好吗αβγāáǎà";
    qDebug() << str.size();
    for(int i=0;i<str.size();i++)
    {
        qDebug() << str.at(i);
    }
 
    // 判断字符串是否为空
    qDebug() << str.isEmpty();
    str.append("fdf");
    qDebug() << str;
 
    // 基于16进制转换
    int i = 16;
    qDebug() << QString::number(i,16);
 
    // 支持链式调用的转换
    qDebug() << str.setNum(255,16).prepend("0x");
 
    str = "0";
    bool result; // 转换成功或失败的结果
    // QString → int
    int m = str.toInt(&result,10);
    if(result)
        qDebug() << "转换成功:" << m;
    else
        qDebug() << "转换失败:" << m;
}
 
Dialog::~Dialog()
{
    delete ui;
}

由于QString类函数众多,无需死记每个函数,只需要把常用的函数单词记住,随用随查即可。

 

2. 容器类

Qt重新实现了C++中的容器类,这些容器类比C++中STL的容器类更加轻巧、安全和易于使用,使用Qt的容器类可以减少可执行文件的大小,Qt的容器类是线程安全的,在基本兼容C++的容器类接口的基础上拓展了新的接口。

分别以QList和QMap为例,进行顺序容器和关联容器的讲解。

2.1 QList

自定义一个C++类,作为QList的元素类型。

下面是创建自定义的C++类的步骤:

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

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

 3. 在弹出的窗口中,输入类名后点击“下一步”。

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

 

 需要注意的是,QStringList类型基本等同QList<QString>。

2.2 QMap

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
// 头文件
#include <QMap>
#include <QDebug>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

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["姓名"] = "张三";
    map["年龄"] = "22岁";
    map.insert("地址","济南市高新区");

    // Qt的容器类型,如果元素类型支持输出
    // 则可以直接输出容器对象
    qDebug() << map;



    // 取出元素之前先判断一下此键值对是否存在
    if(map.contains("姓名"))
    {
        // 修改
        map["姓名"] = "李四";
        qDebug() << map["姓名"];
    }

    // 删除
    // 失败返回0
    int result = map.remove("地址");
    if(result == 0)
        qDebug() << "移除失败";
    else
        qDebug() << "移除成功";


    // 也可以使用下面的方式取出元素,无需判断
    // 参数1:键
    // 参数2:取出失败的默认值
    QString value = map.value("地址","404");
    qDebug() << value;

    qDebug() << "------STL迭代------";
    for(QMap<QString,QString>::const_iterator iter = map.begin();
        iter != map.end();iter++)
    {
        // 分别取出键和值
        qDebug() << iter.key() << iter.value();
    }

    qDebug() << "---------Java迭代---------";
    // 读写 QMutableMapIterator<Key, T>
    // 只读 QMapIterator<Key, T>
    QMapIterator<QString, QString> iter(map);
    while(iter.hasNext())
    {
        iter.next(); // 向后移动
        // 分别取出键和值
        qDebug() << iter.key() << iter.value();
    }
}

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

3. 跨平台数据类型

Qt是一个跨平台的开发框架,为了确保在各个平台上的数据类型具有同一的长度,Qt为各种常用的基本数据类型定义了类型符号。

除此之外,Qt中还有一个通用数据类型QVariant,可以对常见的Qt数据类型进行相互转换,也可以使用QVariant类型作为中间类型间接转换不同数据类型。

4. 时间和日期处理 

Qt拥有若干时间和日期相关类型,本次使用QDateTime类进行讲解。

QDateTime类常用函数如下所示。

● qint64 QDateTime::currentMSecsSinceEpoch() [static]

返回1970年1月1日 0点0分0秒到现在的毫秒数

● QDateTime QDateTime::currentDateTime() [static]

返回一个基于当前时区的时间和日期信息的QDateTime对象

● QString QDateTime::toString(const QString & format) const

返回一个自定义格式的时间日期字符串

参数是自定义的时间和日期格式。

 时间和日期相关组件:

 5. QTimer 定时器类

定时器类QTimer主要有两个功能:

● 周期性执行某个动作

● 延迟一段时间后执行某个动作

QTimer类与之前的QButtonGroup一样,需要手动控制堆内存对象的创建和销毁。

QTimer的常用属性如下所示。

● interval : int

如果是一次性的定时器,此属性表示延迟执行的时间;

如果是周期性的定时器,此属性表示间隔执行的时间。

时间单位毫秒。

● singleShot : bool

此属性表示定时器是否是一次性,如果不是一次性就是周期性。

QTImer的常用函数如下所示。

● void QTimer::start() [slot]

开始或重新开始定时器,如果定时器已经在运行,则会停止运行后再次运行。

● void QTimer::stop() [slot]

停止运行

● void QTimer::timeout() [signal]

定时器出发时发射的信号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中的一些常用类 的相关文章

随机推荐

  • WeakMap弱引用

    let obj name 张三 name 张三 这个对象能够被读取到 因为obj这个变量名对它的引用 将引用覆盖掉 obj null 这个对象将会被从内存中移除 因为我们已经失去了对他的所有引用 let obj name 张三 let ar
  • 打开计算机窗口的快捷键是什么,打开多个窗口,用哪个快捷键可以将窗口切换?...

    2006 02 23 上网的时候 一打开窗口就是最小化 怎样可以一打开就是最大化呢 谢谢 IE具有 自动记忆功能 它能保存上一次关闭窗口后的状态参数 IE本身没有提供相关设置选项 不过可以借助修改注册表来实现 打开 注册表编辑器 找到 HK
  • MRTK-Unity简单入门

    前期工作 1 切换生成平台 UWP 2 Microsoft Mixed Reality Feature Tool导入和配置资源 Mixed Reality Toolkit Foundation 混合现实工具包基础 包是唯一的包 必须将它导入
  • 【Android】详解7.0带来的新工具类:DiffUtil

    http blog csdn net zxt0601 article details 52562770 一 概述 DiffUtil是support v7 24 2 0中的新工具类 它用来比较两个数据集 寻找出旧数据集 新数据集的最小变化量
  • 快速排序Java实现

    public class ksSort 快排 param args public static void main String args int test 1 9 5 7 8 2 4 quickSort quick Sort test f
  • 前端:react(柒):react 多个组件共享state

    柒 react 多个组件共享state 经常会遇到几个组件需要共用状态数据的情况 这种情况下 我们最好将这部分共享的状态提升至他们最近的父组件当中进行管理 const scaleNames c Celsius f Fahrenheit fu
  • 为什么PCB设计时经常进行电源平面的内缩

    我们可以发现 有的PCB在GND层和电源层会进行一定程度的电源平面内缩设计 那么大家有没有想过为什么要内缩呢 需要搞清楚这个问题 我们需要来先了解一个知识点 那就是 20H 原则 20H原则主要是为了减小电路板电磁辐射问题提出来的 在电路板
  • C# 操作JSON几种方式盘点

    C 操作JSON几种方式 通过两种在c 中常用的方式来实现对Json数据的序列化和反序列化 为了实现大多数的需求 我们采用稍微复杂一点的数据模型 首先我们有以下json数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  • Nginx 中 alias 和 root 的区别

    文章目录 一 语法说明 二 试验论证 三 经验总结 一 语法说明 alias 采用 alias 配置的资源目录必须是准确的 localtion 正则匹配到 path 后 直接在 alias 定义的目录下查找 采用 alias 标签配置资源路
  • 点击图片查看原图(图片按比例展示,点击旋转)

    使用layer弹框 实现点击图片查看原图的效果 引入layer 函数封装 点击图片查看大图 function showBigImage e let src e attr src let img new Image img src src l
  • 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色

    题目 给定一个包含红色 白色和蓝色 共 n 个元素的数组 nums 原地对它们进行排序 使得相同颜色的元素相邻 并按照红色 白色 蓝色顺序排列 我们使用整数 0 1 和 2 分别表示红色 白色和蓝色 必须在不使用库内置的 sort 函数的情
  • IOC(Inversion of Control 控制反转)

    控制反转是什么 简单的说 就是好莱坞原则 Don t call us we will call you 留下你的电话号码 我们有需求就会打电话给你 背景 我们知道在面向对象设计的软件系统中 它的底层都是由N个对象构成的 各个对象之间通过相互
  • EasyX实现贪吃蛇

    成品展示 文章目录 实现思路 代码实现 game h game cpp test cpp 实现思路 贪吃蛇的实现思路并不复杂 由于我们需要将数据展示在图形窗口上 因此就不需要之前那种用数组表示整个游戏地图的方法 贪吃蛇的蛇有X坐标和Y坐标
  • bazel在tensorflow中编译报错

    开始根据博文建议用了最新版的bazel 0 28 0 安装成功了 但在tensorflow编译 bazel build tensorflow tools graph transforms transform graph 报错 home ty
  • Python爬虫Scrapy框架IP代理的配置与调试

    在调试爬虫的时候 新手都会遇到关于ip的错误 好好的程序突然报错了 怎么解决 关于ip访问的错误其实很好解决 但是怎么知道解决好了呢 怎么确定是代理ip的问题呢 由于笔者主修语言是Java 所以有些解释可能和Python大佬们的解释不一样
  • SQL中的时间

    前言 Oracle MySQL Postgresql SqlServer中对于时间的处理是不同的 为了便于使用和区分 我在来列一下这常见的四种数据库中对于时间进行处理方式 目录 一 Oracle 1 dd mon yy转换为yyyy mm
  • 自己实现一个 atoi 函数

    atoi ASCII to integer 把字符串转换成整型数 情况一 输入的字符包含不是数字字符的字符 例如 123adc4 针对这种情况 我们只要加上判断就行了 只要遇到不是数字字符的直接返回 情况二 如果在数字字符前面有正负号又该怎
  • 二叉树中的dfs

    上周去华为面试的时候 遇到了一个自己以前积累过的dfs问题 当时觉得dfs的问题不需要搞懂每一步到哪里了 只需要大体上知道怎么弄套模板就可以 后来现场画那个dfs的图 以及每个状态的变化 虽然画出来了 但是觉得还是要好好思考下这些问题 毕竟
  • Argparse 教程

    https docs python org zh cn 3 howto argparse html
  • Qt中的一些常用类

    目录 1 QString 字符串类 2 容器类 2 1 QList 2 2 QMap 3 跨平台数据类型 4 时间和日期处理 5 QTimer 定时器类 1 QString 字符串类 QString是Qt中的字符串类 使用Unicode编码