C++ QT设计模式:责任链模式

基本概念

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,将请求沿着处理链传递,直到有一个对象能够处理为止。

实现的模块有:

  • Handler(处理者):定义一个处理请求的接口。
  • ConcreteHandler(具体处理者):实现了处理者接口,判断自己是否能够处理请求,如果不能将请求传递给下一个处理者。
  • Request(请求):封装了请求的信息,通常作为处理者方法的参数传递。

使用场景

  • 当需要将请求的发送者和接收者进行解耦时。
  • 当有多个对象可以处理同一请求,但不确定哪个对象应该处理时。
  • 当需要动态指定处理请求的顺序时。

实现

QT源码:事件系统

QT的事件处理系统同样用到了事件处理系统,其中事件通过事件队列发送到对应的对象,每个对象都可以处理该事件,如果该对象无法处理,将会发给下一个对象。

以下是 QAppliaction 发送鼠标事件给 QWidget 的部分源码:

//接收鼠标事件的对象w
QWidget* w = static_cast<QWidget *>(receiver);
//鼠标事件e
QMouseEvent* mouse = static_cast<QMouseEvent*>(e);......while (w) {//创建一个新的鼠标事件对象,用于在对象树中传播鼠标事件QMouseEvent me(mouse->type(), relpos, mouse->windowPos(), mouse->globalPos(),mouse->button(), mouse->buttons(), mouse->modifiers(), mouse->source());......//如果鼠标事件被接受,打破循环eventAccepted = (w == receiver ? mouse : &me)->isAccepted();if (res && eventAccepted)break;......//如果鼠标事件未被接受,将w设置为w的父组件,继续循环w = w->parentWidget();
}

可以看出, QApplication 将鼠标事件沿着对象树传递,直到有一个对象能够处理为止,符合责任链模式的思想,其中:

  • QObject:Handler(处理者),定义一个处理鼠标事件的接口。
  • QWidgt:ConcreteHandler(具体处理者),实现了 QObject 的接口,判断自己是否能够处理鼠标事件,如果不能将请求传递给父类 QWidget。
  • QMouseEvent:Request(请求),封装了鼠标事件的信息。
  • QAppliaction:客户端,是请求的发起者。

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

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

相关文章

Operations Research课程之非线性规划(梯度下降|牛顿法|Gurobi+Python)

目录 1.非线性规划介绍 2.梯度下降法(Gradient descent) 2.1 梯度和Hessians矩阵 2.2 梯度下降算法 2.3 算法举例 3. 牛顿法(Newton’s method) 3.1 适合单变量的牛顿法 3.2 适合多变量的牛顿法 3. 实例(GurobiPython) 3.1 Agricultural Pricing问题描述 3.2 Gurobi…

【论文复刻】堆叠柱状图+饼图

复刻了一下这篇论文里的fig2c&#xff1a;Impacts of COVID-19 and fiscal stimuli on global emissions and the Paris Agreement | Nature Climate Change 效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;随机赋值 2. 图像绘制&#xff1a;绘制堆叠柱状…

【C++】可变参数模板简单介绍

前言 可变参数模板是C11中的新特性&#xff0c;它能够让我们创建可以接收可变参数的函数模板和类模板&#xff0c;相比C98/03&#xff0c;类模版和函数模版中只能含固定数量的模版参数&#xff0c;可变模版参数是一个巨大的改进&#xff0c;通过系统系统推演数据的类型&#xf…

Python笔记-Alchemy中改变表的模式(库schema)

现在是2024-01-10&#xff0c;发到互联网上应该是2024-05-13。查了下chatgpt&#xff0c;麻了&#xff0c;乱七八糟的。 最后还是靠stackoverflow解决的&#xff0c;目前&#xff0c;从解决问题的角度来看&#xff0c;这个还是牛逼点。 原文如下&#xff1a; python - How d…

Ansible常用变量【下】

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前言 在上一篇文章《Ansible常用变量【上】》中&#xff0c;学习了Ansible常用变量的前半部分&#xff0c;放了个五一假&#x…

部署的脚本

文章目录 部署脚本2024心得优秀博客 部署脚本2024 心得 脚本部署&#xff0c;可以帮你大大的提高工作效率。脚本也被称为自动化办公。自己写的博客要么是太简单&#xff0c;要么是写的不好&#xff0c;总之是狗屎&#xff0c;所以不要自己写博客。多收集和整理一些不错的博客…

拼多多流量推广和点击哪个好?拼多多自然流量规则

流量推广是通过付费广告来增加商品的曝光量&#xff0c;而点击推广则是通过付费广告来增加商品的点击量。那么&#xff0c;对于商家来说&#xff0c;哪种推广方式更好呢? 一、拼多多流量推广和点击哪个好 流量推广&#xff1a;流量推广的优势在于能够快速提高商品的曝光量&a…

买货查窜货过程中的可能情况

控价除了要管控渠道中的低价、乱价链接外&#xff0c;还可能需要解决窜货问题&#xff0c;当窜货问题蔓延不及时解决时&#xff0c;渠道会越来越受影响&#xff0c;所以治理窜货也是控价过程中很重要的一步&#xff0c;窜货问题的治理多通过买货溯源来解决&#xff0c;买货要先…

Python多线程加速-休眠部分线程

总所周知Python由于GIL的问题&#xff0c;使用多线程时同一时刻只有一个线程在工作。故Python会在所有线程之间不断的切换&#xff0c;每切换到一个线程会执行一段字节码指令然后切换到另一个线程。如果开启了很多线程&#xff0c;且只有小部分线程在工作&#xff0c;如果不休眠…

Next.js与SSR:构建高性能服务器渲染应用

1. 创建项目 通过create-next-app脚手架创建一个新的Next.js项目&#xff1a; npx create-next-app my-app cd my-app2. 自动SSR 在Next.js中&#xff0c;每个.js或.jsx文件的组件都会被自动处理为SSR页面。例如&#xff0c;创建一个pages/index.js文件&#xff1a; // pag…

SOCKS5代理、代理IP、HTTP与网络安全

在当前网络环境中&#xff0c;数据安全和隐私保护是企业和个人面临的主要挑战之一。网络代理技术&#xff0c;如SOCKS5代理、代理IP和HTTP代理&#xff0c;成为了保护网络活动的关键工具。这篇文章将深入探讨这些代理技术的工作原理、它们在网络安全中的作用&#xff0c;以及如…

点云分割论文阅读01--FusionVision

FusionVision: A Comprehensive Approach of 3D Object Reconstruction and Segmentation from RGB-D Cameras Using YOLO and Fast Segment Anything FusionVision&#xff1a;使用 YOLO 和 Fast Segment Anything 从 RGB-D 相机重建和分割 3D 对象的综合方法 toread&#x…

拥有一台服务器可以做哪些有趣又实用的事情?

在接触云服务器这个概念你以前&#xff0c;你是不是在想&#xff1a; 可能是&#xff0c;云服务器&#xff0c;这个产品的存在&#xff0c;它可以为你做些什么实用的事情吗&#xff1f; 或者是&#xff0c;云服务器这个看似高大上的科技产品&#xff0c;其实可以为我们的生活…

JVM 自定义类加载器

文章目录 1. 为什么要自定义类加载器1.1 隔离加载类1.2 修改类加载的方式1.3 扩展加载源1.4 防止源码泄漏 2. 自定义类加载器应用场景有哪些3. 两种实现方式 自定义类加载器是Java中的一个高级特性&#xff0c;允许您在运行时动态加载类。通过自定义类加载器&#xff0c;您可以…

论文翻译及部分笔记:LANDMARC: Indoor Location Sensing Using Active RFID

LANDMARC: Indoor Location Sensing Using Active RFID 摘要 移动计算设备和嵌入式技术的日益融合引发了“上下文感知”应用的发展和部署&#xff0c;其中位置是最重要的上下文。在本文中&#xff0c;我们介绍了一种名为LANDMARC的定位感知原型系统&#xff0c;该系统使用射频识…

在云计算与人工智能中,7ECloud扮演着什么样的角色

数据驱动的时代&#xff0c;云计算和人工智能已成为推动现代科技进步的两大引擎。作为一家专注于云计算的公司&#xff0c;7ECloud正是在这个领域发挥自己的力量&#xff0c;力图为企业提供一站式解决方案&#xff0c;并拥有来自厂家的源头支持&#xff0c;用极其低的价格助力企…

QT day5 作业

服务器头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QList> //链表类 #include <QMessageBox> //消息对话框类 #include <QDebu…

vscode无法连接 , .vscode-server版本问题

vscode无法连接 &#xff0c; .vscode-server版本问题 解决办法 &#xff1a; 查看自己的版本号 2. 两边vscode版本号需要一致 找一台vscode可以远程连接的&#xff0c; 将它的.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a 传到 远程服务器上 或者 本地的…

VTK 数据类型:vtkUnstructuredGrid

VTK 数据类型&#xff1a;vtkUnstructuredGrid VTK 数据类型&#xff1a;vtkUnstructuredGridVTK 中数据类型的继承关系常用的几何类型实例&#xff1a;vtkHexahedron 和 vtkTetra VTK 数据类型&#xff1a;vtkUnstructuredGrid 非结构化点是在空间中离散随意分布的点&#xf…

AI去除神器安卓手机版软件下载,一键擦除效果好Android稀缺资源

最新AI美体安卓应用&#xff0c;解锁惊喜功能&#xff01; 随着科技的不断进步&#xff0c;人工智能技术已经在各个领域展现出惊人的应用潜力。今天&#xff0c;我们将向您介绍一款最新的AI美体安卓应用&#xff0c;让您体验全新的视觉魅力&#xff01; ### 精彩功能一览 这…