当前位置: 首页 > news >正文

QPair使用详解

QPair使用详解

  • 一、创建和初始化 `QPair`
    • 1.1 QPair默认构造
    • 1.2 使用值初始化
    • 1.3 QPair拷贝构造
  • 二、访问 `QPair` 的值
    • 2.1 修改 `QPair` 的值
    • 2.2 比较 `QPair`
    • 2.3 使用 `qMakePair` 辅助函数
    • 2.4 使用 `QPair` 的场景
  • 三、QPair自定结构体
    • 3.1 定义自定义结构体
    • 3.2 在 `QPair` 中使用自定义结构体
    • 3.3 主要操作
    • 3.4 详细用法示例
  • 总结

QPair 是 Qt 提供的一个模板类,用于存储一对值。它非常适合在需要将两个相关的值组合在一起并作为一个整体处理的场景中使用。下面是 QPair 的详细使用说明。

一、创建和初始化 QPair

1.1 QPair默认构造

QPair<int, QString> pair;

1.2 使用值初始化

QPair<int, QString> pair(1, "one");

1.3 QPair拷贝构造

QPair<int, QString> anotherPair(pair);

二、访问 QPair 的值

QPair 提供了两个公有成员变量 firstsecond,用于访问存储的两个值。

QPair<int, QString> pair(1, "one");
int firstValue = pair.first;  // 访问第一个值
QString secondValue = pair.second;  // 访问第二个值

2.1 修改 QPair 的值

可以直接修改 firstsecond 来更改 QPair 存储的值。

pair.first = 2;
pair.second = "two";

2.2 比较 QPair

QPair 提供了比较操作符,用于比较两个 QPair 对象。比较时会先比较 first,如果相等则比较 second

QPair<int, QString> pair1(1, "one");
QPair<int, QString> pair2(1, "two");
bool areEqual = (pair1 == pair2);  // false
bool areNotEqual = (pair1 != pair2);  // true
bool lessThan = (pair1 < pair2);  // true,因为 "one" < "two"

2.3 使用 qMakePair 辅助函数

Qt 提供了一个辅助函数 qMakePair 来简化 QPair 的创建。

auto pair = qMakePair(1, QString("one"));
  • 示例代码

下面是一个完整的示例,演示了 QPair 的基本用法:

#include <QCoreApplication>
#include <QPair>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建并初始化 QPairQPair<int, QString> pair(1, "one");// 访问值qDebug() << "First value:" << pair.first;qDebug() << "Second value:" << pair.second;// 修改值pair.first = 2;pair.second = "two";qDebug() << "Modified first value:" << pair.first;qDebug() << "Modified second value:" << pair.second;// 使用 qMakePair 创建 QPairauto anotherPair = qMakePair(3, QString("three"));qDebug() << "Another pair first value:" << anotherPair.first;qDebug() << "Another pair second value:" << anotherPair.second;// 比较 QPairQPair<int, QString> pair1(1, "one");QPair<int, QString> pair2(1, "two");qDebug() << "pair1 == pair2:" << (pair1 == pair2);qDebug() << "pair1 != pair2:" << (pair1 != pair2);qDebug() << "pair1 < pair2:" << (pair1 < pair2);return a.exec();
}

2.4 使用 QPair 的场景

  • 返回多个值:函数需要返回两个相关值时,可以使用 QPair
  • 存储关联数据:在数据结构中存储关联数据对,例如键值对等。
  • 临时组合值:在需要临时将两个值组合在一起进行某些操作时。

三、QPair自定结构体

QPair 是Qt提供的一个模板类,用于存储一对值。它可以存储任意类型的数据,包括自定义结构体。以下是如何在 QPair 中使用自定义结构体的详细步骤和示例:

  1. 定义自定义结构体
    创建一个结构体来表示自定义类型,确保该结构体包含必要的构造函数和操作符。

  2. QPair 中使用自定义结构体
    定义和操作 QPair 实例,将自定义结构体作为 QPair 的成员。

  • 示例

假设我们有一个表示坐标的自定义结构体 Coordinate

3.1 定义自定义结构体

#include <QString>
#include <QDebug>struct Coordinate {int x;int y;// 构造函数Coordinate(int x = 0, int y = 0) : x(x), y(y) {}// 友元函数用于输出 Coordinate 对象的信息friend QDebug operator<<(QDebug dbg, const Coordinate &coord) {dbg.nospace() << "Coordinate(x: " << coord.x << ", y: " << coord.y << ")";return dbg.space();}
};

3.2 在 QPair 中使用自定义结构体

#include <QPair>
#include <QDebug>int main() {// 创建 QPair 实例来存储 Coordinate 结构体QPair<Coordinate, Coordinate> line;// 初始化 QPair 成员line.first = Coordinate(0, 0);line.second = Coordinate(10, 10);// 输出 QPair 成员qDebug() << "Line start:" << line.first;qDebug() << "Line end:" << line.second;return 0;
}
  1. 定义自定义结构体 Coordinate

    • Coordinate 结构体包含两个成员变量 xy,用来表示坐标。
    • 构造函数 Coordinate(int x = 0, int y = 0) 用于初始化坐标。
    • 友元函数 operator<< 用于在调试输出中显示坐标信息。
  2. QPair 中使用 Coordinate

    • 创建 QPair<Coordinate, Coordinate> 实例 line
    • 初始化 QPairfirstsecond 成员,分别表示线段的起点和终点坐标。
    • 使用 QDebug 输出 QPair 的成员信息。

3.3 主要操作

  1. 创建和初始化 QPair

    QPair<Coordinate, Coordinate> line(Coordinate(0, 0), Coordinate(10, 10));
    
  2. 访问 QPair 成员

    Coordinate start = line.first;
    Coordinate end = line.second;
    
  3. 修改 QPair 成员

    line.first = Coordinate(5, 5);
    line.second = Coordinate(15, 15);
    

3.4 详细用法示例

#include <QPair>
#include <QDebug>struct Coordinate {int x;int y;Coordinate(int x = 0, int y = 0) : x(x), y(y) {}friend QDebug operator<<(QDebug dbg, const Coordinate &coord) {dbg.nospace() << "Coordinate(x: " << coord.x << ", y: " << coord.y << ")";return dbg.space();}
};int main() {QPair<Coordinate, Coordinate> line;line.first = Coordinate(0, 0);line.second = Coordinate(10, 10);qDebug() << "Line start:" << line.first;qDebug() << "Line end:" << line.second;// 修改 QPair 成员line.first = Coordinate(5, 5);line.second = Coordinate(15, 15);qDebug() << "Modified line start:" << line.first;qDebug() << "Modified line end:" << line.second;return 0;
}

通过这些步骤,你可以在 QPair 中使用自定义结构体,并实现对自定义结构体对的管理和操作。确保自定义结构体具有适当的构造函数和操作符,以便与 QPair 及其他Qt容器类兼容。

总结

QPair 是一个非常有用的工具类,能够方便地存储和处理一对值。通过掌握 QPair 的基本用法,您可以在需要处理成对数据的场景中更加高效地编写代码。

其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)

相关文章:

QPair使用详解

QPair使用详解 一、创建和初始化 QPair1.1 QPair默认构造1.2 使用值初始化1.3 QPair拷贝构造 二、访问 QPair 的值2.1 修改 QPair 的值2.2 比较 QPair2.3 使用 qMakePair 辅助函数2.4 使用 QPair 的场景 三、QPair自定结构体3.1 定义自定义结构体3.2 在 QPair 中使用自定义结构…...

C# 语言在AGI 赛道上能做什么

自从2022年11月OpenAI正式对外发布ChatGPT依赖&#xff0c;AGI 这条赛道上就挤满了重量级的选手&#xff0c;各大头部公司纷纷下场布局。原本就在机器学习、深度学习领域占据No.1的Python语言更是继续稳固了自己AI一哥的位置。凭借着Microsoft 和 OpenAI 长期以来一直是紧密相连…...

微信小程序-API 本地存储

一.本地存储-同步API 存储 &#xff1a; wx.setStorageSync 获取&#xff1a;wx.getStorageSync 删除&#xff1a;wx.removeStorageSync 清空&#xff1a;wx.clearStorageSync 代码&#xff1a; save(){//存储wx.setStorageSync(id, 1) wx.setStorageSync(obj, {name:"te…...

TensorFlow音频分类修复

原先传wav格式,后来发现前端生成的wav格式不完整 后端改mp3 其实是mp3和wav都可以接收 前端MP3和wav格式不正确,导致可以接收,但都无法计算时长 该文作废,可能导致音频分类不准确 修复TensorFlow放到生产后报错问题-CSDN博客 依赖 <dependency><groupId>or…...

C#学习系列之ListView垂直滚动

C#学习系列之ListView垂直滚动 前言垂直滚动总结 前言 当ListView中不断增加新内容&#xff0c;经常是纵向滚动。 垂直滚动 这个是关键&#xff1a;<VirtualizingStackPanel/> <ListView.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel/>&…...

MySQL 常用函数总结

MySQL 提供了丰富的内置函数&#xff0c;用于在查询中进行各种计算、字符串处理、日期和时间操作等。这些函数可以帮助我们更有效地从数据库中检索和处理数据。下面将总结一些 MySQL 中常用的函数及其用法。 1. 数值函数 1.1 ROUND() ROUND() 函数用于对数值进行四舍五入操作…...

SpingBoot快速入门下

响应HttpServietResponse 介绍 将ResponseBody 加到Controller方法/类上 作用&#xff1a;将方法返回值直接响应&#xff0c;如果返回值是 实体对象/集合&#xff0c;将会自动转JSON格式响应 RestController Controller ResponseBody; 一般响应 统一响应 在实际开发中一般…...

什么是symbol?

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;Symbol是一种新的基本数据类型&#xff0c;它的主要特点是独一无二且不可变。以下是关于ES6中Symbol的详细解释&#xff1a; 定义与特性&#xff1a; Symbol是ES6引入的一种基本数据类型&#xff0c;用于表示独一无…...

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…...

如何把模糊的图片修复变清晰,怎么做?有那些方法?

模糊照片怎么修复清晰&#xff1f;有些照片可能会因为保存不当或其他原因而变得模糊&#xff0c;这些照片删掉又觉得可惜&#xff0c;那么如何让这些照片焕然一新呢&#xff1f;今天就给大家分享几种可以将这些珍贵的模糊照片修复为高清照片的方法。接下来&#xff0c;给大家演…...

思科路由器密码恢复方法

1.密码恢复原理 Cisco路由器保存了几种不同的配置参数&#xff0c;并存放在不同的内存模块中。 Cisco系列路由器的内存有&#xff1a;ROM&#xff0c;闪存&#xff08;Flashmemory&#xff09;,RAM&#xff0c;不可变RAM和动态内存&#xff08;DRAM&#xff09;等5种。 一般情况…...

HTML某联招聘

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!-- 一些其他说明&#xff1a; 不写form的话&#xff0c;表单内容也是可以正常显示的&#xff0…...

第一百一十六节 Java 面向对象设计 - Java 终止块

Java 面向对象设计 - Java 终止块 ​try ​块也可以有零个或一个​ finally​ 块。 ​finally ​块总是与 ​try ​块一起使用。 语法 使用 ​finally​ 块的语法是 finally {// Code for finally block }​finally​ 块以关键字 ​finally​ 开始&#xff0c;后面紧跟一对…...

YOLOv10改进 | 注意力篇 | YOLOv10引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测

1. SEAM介绍 1.1 摘要:近年来,基于深度学习的人脸检测算法取得了长足的进步。 这些算法通常可以分为两类,即像 Faster R-CNN 这样的两级检测器和像 YOLO 这样的一级检测器。 由于精度和速度之间具有更好的平衡,一级探测器已广泛应用于许多应用中。 在本文中,我们提出了一…...

问题解决:Problem exceeding maximum token in azure openai (with java)

问题背景&#xff1a; Im doing a chat that returns queries based on the question you ask it in reference to a specific database. For this I use azure openai and Java in Spring Boot. 我正在开发一个聊天功能&#xff0c;该功能根据您针对特定数据库的提问返回查询…...

eNSP学习——OSPF在帧中继网络中的配置

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…...

PHP转Go系列 | 条件循环的使用姿势

大家好&#xff0c;我是码农先森。 条件 在 PHP 语言中条件控制语句&#xff0c;主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…...

八大经典排序算法

前言 本片博客主要讲解一下八大排序算法的思想和排序的代码 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;排序_普通young man的博客-CSDN博客 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 目录 …...

【LeetCode热题 100】三数之和

leetcode原地址&#xff1a;https://leetcode.cn/problems/3sum/description 描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和…...

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

OpenFOAM 简介 OpenFOAM(Open Field Operation and Manipulation)是一个领先的开源计算流体动力学(CFD)软件包,由 OpenFOAM Foundation 开发和维护。作为一个高度模块化和可扩展的软件工具箱,OpenFOAM 支持模拟多种物理现象,包括流体流动、传热、混合、燃烧、声学等。由…...

YOLOv10改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…...

PostgreSQL源码分析——pg_basebackup

涉及到的代码主要在src/backend/replication以及bin/pg_basebackup中。 我们知道pg_basebackup是一个进行基础备份的工具&#xff0c;除了使用这个工具&#xff0c;还可以用底层API的方式进行基础备份&#xff0c;主要过程如下&#xff1a; 连接到数据库执行select pg_start_…...

QT基础 - 常见图表绘制

目录 零. 前言 一. 添加模块 折线图 三. 树状图 四. 饼图 五. 堆叠柱状图 六. 百分比柱状图 七. 散点图和光滑曲线图 散点图 光滑曲线图 零. 前言 Qt Charts 是 Qt 框架的一个模块&#xff0c;用于创建各种类型的图表和数据可视化。它为开发者提供了一套功能强大的工…...

解释React中的“端口(Portals)”是什么,以及如何使用它来渲染子节点到DOM树以外的部分。

React中的“端口&#xff08;Portals&#xff09;”是一种将子节点渲染到DOM****树以外的部分的技术。在React应用中&#xff0c;通常情况下组件的渲染是遵循DOM的层次结构&#xff0c;即子组件会渲染在父组件的DOM节点内部。然而&#xff0c;有些情况下&#xff0c;开发者可能…...

java实现分类下拉树,点击时对应搜索---后端逻辑

一直想做分类下拉&#xff0c;然后选择后搜索的页面&#xff0c;正好做项目有了明确的需求&#xff0c;查找后发现el-tree的构件可满足需求&#xff0c;数据要求为&#xff1a;{ id:1, label:name, childer:[……] }形式的&#xff0c;于是乎&#xff0c;开搞&#xff01; 一…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 披萨大作战(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…...

探索Facebook对世界各地文化的影响

随着数字化时代的到来&#xff0c;社交媒体已成为连接世界各地人们的重要平台之一。而在这个领域的巨头之一&#xff0c;Facebook不仅是人们沟通交流的场所&#xff0c;更是一座桥梁&#xff0c;将不同地域、文化的人们联系在一起。本文将探索Facebook对世界各地文化的影响&…...

导出requirements.txt

文章目录 requirements.txt导出环境中所有包导出当前项目的包可能遇到的问题 requirements.txt 在Python项目中&#xff0c;通常使用requirements.txt文件来列出所有需要的第三方库和模块。这个文件通常位于项目的根目录下&#xff0c;并且在安装Python项目时&#xff0c;可以…...

我主编的电子技术实验手册(09)——并联电路

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…...

数据结构_二叉树

目录 一、树型结构 二、二叉树 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.5 遍历二叉树 2.6 操作二叉树 总结 一、树型结构 树是一种非线性的数据结构&#xff0c;它是由 n(n>0) 个有限结点组成一个具有层次关系的集合&#xff0c;一棵 n 个…...

做系统进化树的网站/关键词搜索站长工具

Hi, Im Shendi 这里我遇到了一个需求&#xff0c;在进行日志输出的时候&#xff0c;使用可变参数的形式简化字符串拼接操作 于是我就想到了 printf 函数&#xff0c;printf 函数是如下方式使用的 System.out.printf("1%s345", "2"); 其中 %s 会被后面的参…...

做电子书网站/什么是seo和sem

Linux之文本处理三剑客介绍 awk 名称得自于它的创始人阿尔佛雷德艾侯、彼得温伯格和布莱恩柯林汉姓氏的首个字母,它具备了一个完整的语言所应具有的几乎所有精美特性&#xff0c;AWK是一个解释器&#xff0c;三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简…...

注册公司需要什么条件和手续/seo还有哪些方面的优化

C语言中 malloc、calloc、realloc的区别(1)C语言跟内存分配方式<1>从静态存储区域分配.内存在程序编译的时候就已经分配好&#xff0c;这块内存在程序的整个运行期间都存在.例如全局变量、static变量.<2>在栈上创建在执行函数时&#xff0c;函数内局部变量的存储单…...

锦州网站建设预订/网站需要怎么优化比较好

一个整数总能够拆分为2的幂的和。比如&#xff1a; 7124 71222 71114 711122 7111112 71111111 总共同拥有6种不同的拆分方式。 再比方&#xff1a;4能够拆分成&#xff1a;4 4&#xff0c;4 1 1 1 1&#xff0c;4 2 2&#xff0c;4112。用f(n)表示n的不同拆分的种…...

做网站优化排名/深圳网络推广外包

随着无限火力自选模式的开启&#xff0c;许多小伙伴也沉迷在组队开黑的快乐中。而这次由于有Ban位的存在&#xff0c;所以除了最热门的猫咪外&#xff0c;一部分冷门英雄也正在崛起中。悠米悠米绝对是非BAN必选的存在&#xff0c;只要队友稍微选一些肉装坦克&#xff0c;或是灵…...

中山网站建设公司哪家好/免费的建站平台

1&#xff1a;概念邻接矩阵&#xff1a;就是一个一维数组存储图中订单顶点的信息&#xff0c; 用一个二维数组存储图中边的信息&#xff0c;存储顶点之间邻接关系的二维数组称为邻接矩阵。矩阵元素为&#xff1a;邻接表&#xff1a;对图中每个顶点Vi简历一个单链表&#xff0c;…...