[QT编程系列-21]:基本框架 - QT常见数据结构:QString、QList、QVector、QMap、QHash、QSet、QPair详解

news2024/11/26 8:34:34

目录

1 QString

2 QList

3 QVector

4 QMap

5 QHash

6 QSet

7 QPair


1 QString

QString是Qt中用于存储和操作字符串的类。它提供了丰富的字符串处理方法和功能。

以下是QString的一些主要特点和常用操作:

  1. 创建QString对象:

    QString str = "Hello";                    // 直接初始化
    QString str2("World");                     // 使用字符串字面值初始化
    QString str3 = QString("Bonjour");         // 使用构造函数进行初始化
    
  2. 获取字符串内容和长度:

    QString str = "Hello";
    QString str2 = "World";
    QString combined = str + " " + str2;       // 字符串拼接
    int length = str.length();                  // 获取字符串长度
    
  3. 字符串比较和搜索:

    QString str = "Hello";
    QString str2 = "hello";
    bool result = str.compare(str2, Qt::CaseInsensitive);   // 比较字符串,忽略大小写
    int index = str.indexOf("l");                           // 查找子字符串的位置
    
  4. 字符串分割和连接:

    QString str = "Hello,World,Qt";
    QStringList list = str.split(",");                 // 将字符串分割成字符串列表
    QString joined = list.join(" ");                    // 将字符串列表连接成一个字符串
    
  5. 字符串格式化和转换:

    QString str = QString("%1 %2").arg(42).arg(3.14);    // 格式化字符串
    int num = str.toInt();                               // 字符串转换为整数
    double number = str.toDouble();                       // 字符串转换为浮点数
    
  6. 字符串操作和修改:

    QString str = "Hello World";
    QString upper = str.toUpper();                        // 转换为大写字母
    QString lower = str.toLower();                        // 转换为小写字母
    QString trimmed = str.trimmed();                       // 去除首尾空格
    QString replaced = str.replace("World", "Qt");         // 字符串替换
    

以上是QString的一些常用操作,它提供了很多其他方法来操作和处理字符串。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

2 QList

QList是Qt中用于存储同一数据类型的动态数组容器类。它提供了方便的插入、删除和访问操作,并支持迭代器和算法等功能。

以下是QList的一些主要特点和常用操作:

  1. 创建QList对象:

    QList<int> list;                            // 创建一个空的整型列表
    QList<QString> strList = {"Hello", "World"}; // 使用初始化列表创建列表
    QList<double> *doubleList = new QList<double>; // 创建动态分配的列表
    
  2. 添加和删除元素:

    QList<int> list;
    list.append(42);                             // 在列表末尾添加元素
    list.prepend(17);                            // 在列表开头添加元素
    list.insert(2, 99);                           // 在指定位置插入元素
    list.removeFirst();                           // 删除第一个元素
    list.removeLast();                            // 删除最后一个元素
    list.removeAt(1);                             // 删除指定位置的元素
    list.clear();                                 // 清空列表
    
  3. 获取和修改元素:

    QList<QString> strList = {"Hello", "World"};
    QString first = strList.first();              // 获取第一个元素
    QString last = strList.last();                // 获取最后一个元素
    QString str = strList.at(1);                  // 获取指定位置的元素
    strList.replace(0, "Bonjour");                 // 替换指定位置的元素
    
  4. 列表的大小和遍历:

    QList<int> list = {1, 2, 3, 4, 5};
    int size = list.size();                       // 获取列表的大小
    for (int i = 0; i < list.size(); ++i) {
        int value = list.at(i);                    // 使用索引遍历元素
        // 进行操作...
    }
    
  5. 使用迭代器遍历:

    QList<int> list = {1, 2, 3, 4, 5};
    QList<int>::iterator iter;
    for (iter = list.begin(); iter != list.end(); ++iter) {
        int value = *iter;                         // 使用迭代器遍历元素
        // 进行操作...
    }
    
  6. STL算法和其他操作:

    QList<int> list = {1, 2, 3, 4, 5};
    std::sort(list.begin(), list.end());           // 使用STL算法排序列表
    bool contains = list.contains(3);              // 列表是否包含指定元素
    int index = list.indexOf(4);                   // 查找元素的索引位置
    

以上是QList的一些常用操作,它还提供了更多的成员函数和功能,如拷贝构造、深拷贝、元素访问等。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

3 QVector

QVector是Qt中的一个动态数组容器类,用于存储同一数据类型的元素。它提供了高效的随机访问和动态调整大小的功能。

以下是QVector的一些主要特点和常用操作:

  1. 创建QVector对象:

    QVector<int> vector;                            // 创建一个空的整型向量
    QVector<QString> strVector = {"Hello", "World"}; // 使用初始化列表创建向量
    QVector<double> *doubleVector = new QVector<double>(); // 创建动态分配的向量
    
  2. 添加和删除元素:

    QVector<int> vector;
    vector.append(42);                                // 在向量末尾添加元素
    vector.prepend(17);                               // 在向量开头添加元素
    vector.insert(2, 99);                              // 在指定位置插入元素
    vector.removeFirst();                              // 删除第一个元素
    vector.removeLast();                               // 删除最后一个元素
    vector.removeAt(1);                                // 删除指定位置的元素
    vector.clear();                                    // 清空向量
    
  3. 获取和修改元素:

    QVector<QString> strVector = {"Hello", "World"};
    QString first = strVector.first();                 // 获取第一个元素
    QString last = strVector.last();                   // 获取最后一个元素
    QString str = strVector.at(1);                     // 获取指定位置的元素
    strVector.replace(0, "Bonjour");                    // 替换指定位置的元素
    
  4. 向量的大小和遍历:

    QVector<int> vector = {1, 2, 3, 4, 5};
    int size = vector.size();                          // 获取向量的大小
    for (int i = 0; i < vector.size(); ++i) {
        int value = vector.at(i);                       // 使用索引遍历元素
        // 进行操作...
    }
    
  5. 使用迭代器遍历:

    QVector<int> vector = {1, 2, 3, 4, 5};
    QVector<int>::const_iterator iter;
    for (iter = vector.begin(); iter != vector.end(); ++iter) {
        int value = *iter;                              // 使用迭代器遍历元素
        // 进行操作...
    }
    
  6. STL算法和其他操作:

    QVector<int> vector = {1, 2, 3, 4, 5};
    std::sort(vector.begin(), vector.end());           // 使用STL算法排序向量
    bool contains = vector.contains(3);                 // 向量是否包含指定元素
    int index = vector.indexOf(4);                      // 查找元素的索引位置
    

除了上述操作,QVector还提供了其他一些有用的功能,如数据复制、内存预分配、容量调整等。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

4 QMap

QMap是Qt中的一个关联容器类,用于存储键值对(Key-Value)元素。它提供了高效的基于键的查找和插入操作。

以下是QMap的一些主要特点和常用操作:

  1. 创建QMap对象:

    QMap<int, QString> map;                          // 创建一个空的整型到字符串的映射
    QMap<QString, int> strMap = {{"Alice", 26}, {"Bob", 32}}; // 使用初始化列表创建映射
    QMap<QString, double> *doubleMap = new QMap<QString, double>(); // 创建动态分配的映射
    
  2. 添加和删除元素:

    QMap<QString, int> map;
    map.insert("Alice", 26);                          // 插入键值对
    map.insert("Bob", 32);
    map["Charlie"] = 40;                              // 使用下标操作符插入或修改值
    map.remove("Bob");                                // 根据键删除元素
    map.clear();                                      // 清空映射
    
  3. 获取和修改元素:

    QMap<QString, int> map;
    map.insert("Alice", 26);
    map.insert("Bob", 32);
    int ageAlice = map.value("Alice");                 // 获取键对应的值
    int ageBob = map["Bob"];
    map["Charlie"] = 40;                               // 修改键对应的值
    
  4. 查询操作:

    QMap<QString, int> map;
    map.insert("Alice", 26);
    map.insert("Bob", 32);
    bool containsBob = map.contains("Bob");           // 检查是否包含指定键
    int count = map.count();                          // 获取键值对的数量
    QMap<QString, int>::const_iterator iter = map.find("Alice"); // 查找键对应的迭代器
    if (iter != map.end()) {
        int age = iter.value();
    }
    
  5. 遍历操作:

    QMap<QString, int> map;
    map.insert("Alice", 26);
    map.insert("Bob", 32);
    QMap<QString, int>::const_iterator iter;
    for (iter = map.constBegin(); iter != map.constEnd(); ++iter) {
        QString name = iter.key();
        int age = iter.value();
        // 进行操作...
    }
    

QMap还提供了其他一些功能,如键的排序、范围查询、多重映射等。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

5 QHash

QHash是Qt中的一个散列容器类,用于存储键值对(Key-Value)元素。它提供了高效的基于键的查找和插入操作,并使用哈希函数来散列键以提高性能。

以下是QHash的一些主要特点和常用操作:

  1. 创建QHash对象:

    QHash<int, QString> hash;                          // 创建一个空的整型到字符串的散列
    QHash<QString, int> strHash = {{"Alice", 26}, {"Bob", 32}}; // 使用初始化列表创建散列
    QHash<QString, double> *doubleHash = new QHash<QString, double>(); // 创建动态分配的散列
    
  2. 添加和删除元素:

    QHash<QString, int> hash;
    hash.insert("Alice", 26);                          // 插入键值对
    hash.insert("Bob", 32);
    hash["Charlie"] = 40;                              // 使用下标操作符插入或修改值
    hash.remove("Bob");                                // 根据键删除元素
    hash.clear();                                      // 清空散列
    
  3. 获取和修改元素:

    QHash<QString, int> hash;
    hash.insert("Alice", 26);
    hash.insert("Bob", 32);
    int ageAlice = hash.value("Alice");                 // 获取键对应的值
    int ageBob = hash["Bob"];
    hash["Charlie"] = 40;                               // 修改键对应的值
    
  4. 查询操作:

    QHash<QString, int> hash;
    hash.insert("Alice", 26);
    hash.insert("Bob", 32);
    bool containsBob = hash.contains("Bob");           // 检查是否包含指定键
    int count = hash.count();                          // 获取键值对的数量
    QHash<QString, int>::const_iterator iter = hash.find("Alice"); // 查找键对应的迭代器
    if (iter != hash.end()) {
        int age = iter.value();
    }
    
  5. 遍历操作:

    QHash<QString, int> hash;
    hash.insert("Alice", 26);
    hash.insert("Bob", 32);
    QHash<QString, int>::const_iterator iter;
    for (iter = hash.constBegin(); iter != hash.constEnd(); ++iter) {
        QString name = iter.key();
        int age = iter.value();
        // 进行操作...
    }
    

QHash还提供了其他一些功能,如键的排序、范围查询、多重散列等。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

6 QSet

QSet是Qt中的一个集合容器类,用于存储不重复的元素。它提供了高效的查找和插入操作,并保持元素的唯一性。

以下是QSet的一些主要特点和常用操作:

  1. 创建QSet对象:
QSet<int> set;                             // 创建一个空的整型集合
QSet<QString> strSet = {"Apple", "Orange"}; // 使用初始化列表创建集合
QSet<double> *doubleSet = new QSet<double>(); // 创建动态分配的集合

  1. 添加和删除元素:
QSet<int> set;
set.insert(10);                            // 插入元素
set.insert(20);
set.insert(30);
set.remove(20);                            // 删除指定元素

  1. 查询操作:
QSet<int> set = {10, 20, 30};
bool contains = set.contains(20);          // 检查是否包含指定元素
int count = set.count();                    // 获取集合中元素的数量

  1. 遍历操作:
QSet<int> set = {10, 20, 30};
QSet<int>::const_iterator iter;
for (iter = set.constBegin(); iter != set.constEnd(); ++iter) {
    int value = *iter;
    // 进行操作...
}

  1. 集合运算:
QSet<int> setA = {1, 2, 3, 4, 5};
QSet<int> setB = {4, 5, 6, 7, 8};
QSet<int> intersection = setA.intersect(setB);    // 交集
QSet<int> unionSet = setA.unite(setB);             // 并集
QSet<int> difference = setA.subtract(setB);        // 差集

QSet还提供了其他一些功能,如集合的排序、集合的交叉验证等。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

7 QPair

QPair是Qt中的一个通用容器类,用于存储两个不同类型的值。它可以将两个值组合成一个单元,方便进行传递和处理。

以下是QPair的一些主要特点和常用操作:

  1. 创建QPair对象:

    QPair<int, QString> pair;                          // 创建一个空的整型和字符串的配对
    QPair<QString, int> strIntPair = {"Alice", 26};     // 使用初始化列表创建配对
    QPair<QString, double> *strDoublePair = new QPair<QString, double>(); // 创建动态分配的配对
    
  2. 设置和获取值:

    QPair<QString, int> pair;
    pair.first = "Alice";                               // 设置第一个值
    pair.second = 26;                                   // 设置第二个值
    QString name = pair.first;                           // 获取第一个值
    int age = pair.second;                               // 获取第二个值
    
  3. 比较操作:

    QPair<int, int> pairA = {1, 2};
    QPair<int, int> pairB = {3, 4};
    bool equal = (pairA == pairB);                       // 比较两个配对是否相等
    bool notEqual = (pairA != pairB);                    // 比较两个配对是否不相等
    
  4. 交换操作:

    QPair<int, int> pair = {1, 2};
    pair.swap();                                         // 交换两个值
    

QPair提供了一种简便的方式来保存两个不同类型的值,并进行直接访问和操作。它在许多Qt类中被广泛使用,如QMap、QHash等。你可以查阅Qt文档以获取更详细的函数列表和使用示例。

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

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

相关文章

远程在Ubuntu20.04安装nvidia显卡驱动

第零步&#xff0c;找人装一个todesk。 在终端运行&#xff1a; ifconfig 记住ip地址&#xff0c;后面要用。 第一步&#xff0c;安装软件&#xff1a; sudo apt-get update sudo apt-get install g gcc make 第二步&#xff0c;下载显卡驱动&#xff1a; 官方驱动 | NVI…

mac批量提取图片文件名到excel?

mac批量提取图片文件名到excel&#xff1f;最近有个小伙伴向我求助一个电脑操作上的问题&#xff0c;问我在Mac电脑上用什么方法可以快速批量的将大量图片的名称一次性提取出来&#xff0c;并且保存到excel表格里。记得小编曾经给大家分享过windows电脑上批量提取文件名称的方法…

关键点检测SIFT算法笔记

SIFT算法 SIFT&#xff08;Scale Invariant Feature Transform&#xff09;&#xff0c;尺度不变特征变换。具有旋转不变性、尺度不变性、亮度变化保持不变性&#xff0c;是一种非常稳定的局部特征。在目标检测和特征提取方向占据着重要的地位。 SIFT算法所查找到的关键点是一些…

LabVIEW实现基于DCT的野生动物监测无线图像传输

LabVIEW实现基于DCT的野生动物监测无线图像传输 针对野生动物物种数量不断下降的情况&#xff0c;需改进以增强当前野生动物监测系统的能力。目前的系统要求工人进入森林以收集存储在存储卡中的图像数据。这项任务风险很大&#xff0c;而且耗费大量时间。系统也无法提供实时报…

APP加固:助力移动应用安全合规

近日&#xff0c;工业和信息化部发布了2023年第2批侵害用户权益行为的App&#xff08;SDK&#xff09;名单&#xff0c;55款App因涉及强制、频繁、过度索取权限等问题而被通报。这一举措进一步凸显了合规对于APP发展的重要性。 根据工业和信息化部的通报&#xff0c;被通报的这…

redolog 、undolog 和binlog

redolog(可以恢复数据&#xff0c;保证数据不丢失) 、undolog(事务回滚) 和binlog&#xff08;主从同步数据&#xff09; 脏页 在mysql中&#xff0c;当内存数据页和磁盘数据页上的内容不一致时&#xff0c;则称这个内存页为脏页 脏页什么时候会刷入磁盘&#xff1f; ● redo…

MySQL-DQL-小结

基本查询 条件查询 分组查询 排序查询 分页查询

TX Barcode .NET for WPF Crack

TX Barcode .NET for WPF Crack 用于WPF软件的TX Barcode.NET包括一天完成的功能以及用于WPF的软件的2D条形码控制。 用于WPF的TX Barcode.NET的功能和属性&#xff1a; 它具有以下特性和属性&#xff0c;如&#xff1a; 常见的文字处理功能&#xff1a;它可以为用户和开发人员…

网络安全问题严重?Web3和IP代理能否提供解决方案?

在数字世界中&#xff0c;网络安全问题越来越严重。黑客和网络犯罪分子利用各种手段来窃取个人信息、盗取数字资产或破坏网络服务。为了应对这些威胁&#xff0c;Web3和IP代理成为了有力的工具&#xff0c;可以帮助改善网络安全性&#xff0c;提高网络防御水平。 首先&#xff…

Java 9 - JShell

JShell 的主要特点包括&#xff1a; 交互式输入&#xff1a;可以直接在 JShell 中逐行输入 Java 代码&#xff0c;无需编写完整的类或方法结构。即时执行&#xff1a;JShell 会即时执行输入的代码&#xff0c;并返回结果&#xff0c;让我们能够立即查看输出或执行效果。自动补…

Vue Router相关理解

vue-router是vue的一个插件库&#xff0c;专门用来实现SPA应用 SPA应用的理解 单页Web应用&#xff08;single page web application,SPA&#xff09; 整个应用只有一个完整的页面 点击页面中的导航链接不会刷新页面&#xff0c;只会做页面的局部刷新 数据需要通过ajax请求…

QT中QTimer的循环时间小于槽函数执行时间时的状况分析

目录 QTimer运行程序在控制台中实现&#xff1a; 当循环间隔时间大于槽函数时间时&#xff1a; 当存在两个定时器器&#xff0c;其中一个还是间隔100ms&#xff0c;另一个间隔1000ms&#xff1a; 当两个定时器的循环周期大于槽函数执行时间时 QTimer运行程序在控制台中实…

工作笔记20230717

1、C#中winform页面增加切换页面 2、单独定义struct的时候要用变量赋值 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Text; usi…

xml.etree.ElementTree

python使用 xml.etree.ElementTree包的时候&#xff0c;对xml中的空标签进行了简写&#xff0c;想恢复成正常模式怎么弄

如何实现服务器对外开放?路由器端口映射怎么设置?

使用路由器后&#xff0c;Internet用户无法访问到局域网内的主机&#xff0c;因此不能访问内网搭建的Web、FTP、Mail等服务器。路由器端口映射功能可以实现将内网的服务器映射到Internet&#xff0c;从而实现服务器对外开放。路由器端口映射怎么设置&#xff1f;下面给大家介绍…

代码随想录算法训练营第二十天 | 动态规划系列9,10,11,12

动态规划系列9,10,11,12 300 最长递增子序列未看解答自己编写的青春版重点代码随想录的代码我的代码(当天晚上理解后自己编写) 674 最长连续递增序列未看解答自己编写的青春版重点代码随想录的代码我的代码(当天晚上理解后自己编写) 718 最长重复子数组未看解答自己编写的青春版…

ETHERNET/IP转TCP/IP网关tcp/ip协议包含哪几层

大家好&#xff0c;今天我们将带大家了解一款自主研发的通讯网关&#xff0c;远创智控YC-EIP-TCP/IP。这是一个强大的工具&#xff0c;能帮助我们将ETHERNET/IP网络和TCP/IP网络连接在一起&#xff0c;让我们更好地管理和监控网络。 1, 首先&#xff0c;让我们来看看这款网关…

时序数据库 TDengine 流式计算在吉科软冷链系统中的应用实践

当下&#xff0c;随着物流供应链的不断发展&#xff0c;冷链物流正变得越来越重要。通过数字化、平台化和生态化的智慧冷链监管平台&#xff0c;企业可以更好地掌握运输车辆的位置&#xff0c;及时发现并处理异常事件&#xff0c;有效提升客户满意度和信任度&#xff0c;同时也…

轻松构建业务应用程序,提高效率和准确性

在数字化时代&#xff0c;企业和组织面临着不断增长的业务需求和快速变化的市场环境。为了适应这一挑战&#xff0c;越来越多的企业开始寻找一种能够快速开发应用程序、提高效率并降低成本的解决方案。在众多的选项中&#xff0c;我们聊一聊中小企业可选择的低代码平台。 一、简…

idea创建spark教程

1、环境准备 java -version scala -version mvn -version spark -version 2、创建spark项目 创建spark项目&#xff0c;有两种方式&#xff1b;一种是本地搭建hadoop和spark环境&#xff0c;另一种是下载maven依赖&#xff1b;最后在idea中进行配置&#xff0c;下面分别记录两…