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中的一些常用类 的相关文章

  • StackExchange Redis 删除所有以以下开头的键

    我有一个格式的密钥 Error 1 Error 24 Error 32 Using StackExchange Redis 我该怎么办KeyDelete在与格式匹配的所有键上Error 在另一个答案中我看到了 LUA 脚本 EVAL ret
  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 如何配置 Ninject 来注入 NodaTime IClock

    在我的 NinjectConfigurator 中我有 container Bind
  • 如何在 ASP.NET MVC 中处理会话数据

    假设我想存储一个名为language id在会议中 我想我也许可以做如下的事情 public class CountryController Controller WebMethod EnableSession true AcceptVer
  • 如何在 Google Mock 中使用可选参数来模拟方法?

    如何使用可选参数模拟方法谷歌模拟 例如 class A public void set enable bool enabled true class MockA public A MOCK METHOD1 set enable void b
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 如何在 Windows 上的 GCC 中链接 CS50 C 库

    我是 编程新手 一直在尝试使用以下命令编译我的代码MinGW https en wikipedia org wiki MinGW GCC 但我尝试包括CS50 https en wikipedia org wiki CS50 cs50 c
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 我想找到 C# 代码中所有后面没有括号的 if 语句。通过正则表达式

    我想找到所有if声明和for后面没有大括号的语句 当你在一个文件中写入一行时if声明您大多不会将其括在大括号中 所以我想找到所有这些if and for声明 请帮忙 就像我想捕捉这个声明 if childNode Name B return
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • PyQt:在运行时向滚动区域添加小部件

    我试图在运行时通过按下按钮来添加新的小部件 在下面的示例中我使用标签 这里是例子 import sys from PyQt4 QtCore import from PyQt4 QtGui import class Widget QWidge
  • 为什么使用 .AsEnumerable() 而不是转换为 IEnumerable

    扩展方法之一IEnumerable
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • 对 Action 方法的两个并行 ajax 请求排队,为什么?

    我正在使用 ASP NET MVC 开发一个视频网站 我希望在我的应用程序中拥有的一项功能是转码视频 但由于转码过程可能非常耗时 我想向客户端用户展示该过程的进度 因此 我的架构是使用一个控制器操作来处理整个转码过程 并将其进度写入存储在服
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点

随机推荐

  • 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编码