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 支持模拟多种物理现象,包括流体流动、传热、混合、燃烧、声学等。由…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
