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
提供了两个公有成员变量 first
和 second
,用于访问存储的两个值。
QPair<int, QString> pair(1, "one");
int firstValue = pair.first; // 访问第一个值
QString secondValue = pair.second; // 访问第二个值
2.1 修改 QPair
的值
可以直接修改 first
和 second
来更改 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
中使用自定义结构体的详细步骤和示例:
-
定义自定义结构体:
创建一个结构体来表示自定义类型,确保该结构体包含必要的构造函数和操作符。 -
在
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;
}
-
定义自定义结构体
Coordinate
:Coordinate
结构体包含两个成员变量x
和y
,用来表示坐标。- 构造函数
Coordinate(int x = 0, int y = 0)
用于初始化坐标。 - 友元函数
operator<<
用于在调试输出中显示坐标信息。
-
在
QPair
中使用Coordinate
:- 创建
QPair<Coordinate, Coordinate>
实例line
。 - 初始化
QPair
的first
和second
成员,分别表示线段的起点和终点坐标。 - 使用
QDebug
输出QPair
的成员信息。
- 创建
3.3 主要操作
-
创建和初始化
QPair
:QPair<Coordinate, Coordinate> line(Coordinate(0, 0), Coordinate(10, 10));
-
访问
QPair
成员:Coordinate start = line.first; Coordinate end = line.second;
-
修改
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依赖,AGI 这条赛道上就挤满了重量级的选手,各大头部公司纷纷下场布局。原本就在机器学习、深度学习领域占据No.1的Python语言更是继续稳固了自己AI一哥的位置。凭借着Microsoft 和 OpenAI 长期以来一直是紧密相连…...
微信小程序-API 本地存储
一.本地存储-同步API 存储 : wx.setStorageSync 获取:wx.getStorageSync 删除:wx.removeStorageSync 清空:wx.clearStorageSync 代码: 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中不断增加新内容,经常是纵向滚动。 垂直滚动 这个是关键:<VirtualizingStackPanel/> <ListView.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel/>&…...
MySQL 常用函数总结
MySQL 提供了丰富的内置函数,用于在查询中进行各种计算、字符串处理、日期和时间操作等。这些函数可以帮助我们更有效地从数据库中检索和处理数据。下面将总结一些 MySQL 中常用的函数及其用法。 1. 数值函数 1.1 ROUND() ROUND() 函数用于对数值进行四舍五入操作…...

SpingBoot快速入门下
响应HttpServietResponse 介绍 将ResponseBody 加到Controller方法/类上 作用:将方法返回值直接响应,如果返回值是 实体对象/集合,将会自动转JSON格式响应 RestController Controller ResponseBody; 一般响应 统一响应 在实际开发中一般…...
什么是symbol?
在ES6(ECMAScript 2015)中,Symbol是一种新的基本数据类型,它的主要特点是独一无二且不可变。以下是关于ES6中Symbol的详细解释: 定义与特性: Symbol是ES6引入的一种基本数据类型,用于表示独一无…...

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

如何把模糊的图片修复变清晰,怎么做?有那些方法?
模糊照片怎么修复清晰?有些照片可能会因为保存不当或其他原因而变得模糊,这些照片删掉又觉得可惜,那么如何让这些照片焕然一新呢?今天就给大家分享几种可以将这些珍贵的模糊照片修复为高清照片的方法。接下来,给大家演…...
思科路由器密码恢复方法
1.密码恢复原理 Cisco路由器保存了几种不同的配置参数,并存放在不同的内存模块中。 Cisco系列路由器的内存有:ROM,闪存(Flashmemory),RAM,不可变RAM和动态内存(DRAM)等5种。 一般情况…...
HTML某联招聘
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!-- 一些其他说明: 不写form的话,表单内容也是可以正常显示的࿰…...

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

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

问题解决:Problem exceeding maximum token in azure openai (with java)
问题背景: 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. 我正在开发一个聊天功能,该功能根据您针对特定数据库的提问返回查询…...

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

PHP转Go系列 | 条件循环的使用姿势
大家好,我是码农先森。 条件 在 PHP 语言中条件控制语句,主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…...

八大经典排序算法
前言 本片博客主要讲解一下八大排序算法的思想和排序的代码 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:排序_普通young man的博客-CSDN博客 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 …...
【LeetCode热题 100】三数之和
leetcode原地址:https://leetcode.cn/problems/3sum/description 描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和…...
【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具
OpenFOAM 简介 OpenFOAM(Open Field Operation and Manipulation)是一个领先的开源计算流体动力学(CFD)软件包,由 OpenFOAM Foundation 开发和维护。作为一个高度模块化和可扩展的软件工具箱,OpenFOAM 支持模拟多种物理现象,包括流体流动、传热、混合、燃烧、声学等。由…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...