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

MFC与Qt多个控件响应统一响应消息处理

就目前使用C++开发框架来说,今天来讲述下MFC框架下与Qt框架下,如何让多个控件响应统一消息处理方法。

功能:假设有5个按钮,需要响应同一个处理函数,该如何实现呢?

Qt方式

开发环境:win10 VS2017 + Qt5.14.2 x64位

在Qt框架下,想要多个按钮实现一个消息非常简单,只需要在响应槽函数的时候,同时响应到一个函数中就可以了,Qt的信号与槽机制支持这种同一槽与多个信号连接的功能。

举例说明:

connect(ui.btn1, &QPushButton::clicked, this, &QMyWidget::OnBnClicked);
connect(ui.btn2, &QPushButton::clicked, this, &QMyWidget::OnBnClicked);

在这里,唯一有点难度的就是,多个按钮控件响应同一个响应函数时,如何判断是哪个控件触发的呢?

使用qobject_cast方法,类似于标准C++中的dynamic_cast。在这里还需要注意一点的是,如果当前操作的类没有被Q_OBJECT宏声明,这个函数的返回值是未定义的。

消息转换,如下:

QPushButton *btnCurrent = qobject_cast<QPushButton*>(sender());

代码中,btnCurrent是当前处于点击的按钮指针。由此可以获取筛选并做出不同的处理。

MFC方式

开发环境:win10 VS2010 win32

对于MFC框架下实现来说,会稍微有点麻烦。在多个按钮控件响应同一消息时,需要确定响应ID区域。当我们无法确定有多少个按钮需要响应同一函数时,就会造成ID编号空闲,造成不必要的浪费。

接下来,先说一说,已知的固定ID号对应响应同一个响应函数吧。

这里,需要注意的是,控件的ID一定是连续的

ON_COMMAND_RANGE(ID_BUTTON_1 , ID_BUTTON_5 , OnBnClickedMultiple);

当前宏:ON_COMMAND_RANGE 可以将一个连续范围的命令ID映射到单个命令处理函数中。只有一个消息映射条目可以匹配给定的命令ID,也就是说,不能将一个命令映射到多个处理程序。

参数1:代表起始ID号

参数2:代表终止ID号,需要响应的ID编号在这两个编号之间,属于闭区间。

参数3:多个控件响应的同一个处理函数。

与QT方式不一样的地方在于,响应函数中是存在参数的,并且该参数是当前处于响应的控件ID。

代码如下:

afx_msg  void OnBnClickedMultiple(UINT nID);

Qt与MFC方式的多个消息统一响应一个函数的处理到这里就讲述完成了,功能比较简单,相比较而言,还是使用Qt框架更为简单~

我是糯诺诺米团,一名C++开发程序媛~

相关文章:

MFC与Qt多个控件响应统一响应消息处理

就目前使用C开发框架来说&#xff0c;今天来讲述下MFC框架下与Qt框架下&#xff0c;如何让多个控件响应统一消息处理方法。 功能&#xff1a;假设有5个按钮&#xff0c;需要响应同一个处理函数&#xff0c;该如何实现呢&#xff1f; Qt方式 开发环境&#xff1a;win10 VS201…...

Camunda rest api鉴权

对于rest api 不能没有限制的任何人随意调用&#xff0c;需要提供账号信息。 一&#xff1a;工作流引擎增加过滤器 /*** 对/engine-rest/*进行鉴权&#xff0c;防止非法攻击* 客户端调用需要配置用户凭证否则报错401* camunda.bpm.client.basic-auth.username* camunda.bpm.cl…...

【PostgreSQL】在DBeaver中实现序列、函数、视图、触发器设计

【PostgreSQL】在DBeaver中实现序列、函数、触发器、视图设计 基本配置一、序列1.1、序列使用1.1.1、设置字段为主键&#xff0c;数据类型默认整型1.1.2、自定义序列&#xff0c;数据类型自定义 1.2、序列延申1.2.1、理论1.2.2、测试1.2.3、小结 二、函数2.1、SQL直接创建2.1.1…...

PyQt5-小总结

之前学习PyQt5&#xff0c;然后那段时间想做一个桌面小程序&#xff0c;后来由于学习内容较多就做了一小部分&#xff0c;但是可以进行页面跳转。大家如果是初学者对Python感兴趣而且刚学数据库时可以看看代码&#xff0c;可能会有点启发。 效果&#xff1a; 登录进来是这&…...

vue父组件给子组件传值,子组件不渲染的原因及解决方法

父组件传递给子组件的数据&#xff0c;如果是一个复杂对象&#xff08;例如一个数组或对象&#xff09;&#xff0c;那么子组件只会监听对象的引用而不是对象的内容。这意味着当对象的内容发生变化时&#xff0c;子组件不会更新。 解决&#xff1a; 1、在子组件使用 watch 监听…...

【数据库】MySQL锁

一、锁的基本概念 1、锁的定义 锁是协调多个进程或线程并发访问数据库资源的一种机制。 MySQL中的锁是在服务器层或者存储引擎层实现的&#xff0c;保证了数据访问的一致性与有效性。但加锁是消耗资源的&#xff0c;锁的各种操作&#xff0c;包括获得锁、检测锁是否已解除、…...

mongodb学习篇

目录 前言基本概念数据库-database集合-collection文档-document 部署mongodblinux安装mongodbdocker安装mongodb MongoDB Shell (mongosh)命令行工具mongodb可视化-mongodb-compass、mongo-expressmongodb配置文件mongodb库、集合、文档库基本操作集合基本操作文档的增删改查C…...

kubernetes存储类迁移-备份恢复

背景介绍 kubernetes集群最开始使用了nfs作为存储&#xff0c;随着后续使用过程中数据量逐渐增加&#xff0c;nfs存储性能逐步出现不足&#xff0c;现增加了基于csi的分布式块存储后&#xff0c;需要对原有基于nfs存储类下的pv迁移到新的存储类下。 测试环境 k8s集群版本&am…...

python智能手机芯片

在未来&#xff0c;python智能手机芯片的发展方向可能包括以下几个方面&#xff1a; 强化处理能力&#xff1a;随着智能手机功能的不断扩展和用户需求的增加&#xff0c;处理器的性能需求也在不断提升。未来的python智能手机芯片可能会加强处理器的核心数量和频率&#xff0c;以…...

混淆技术概论

混淆技术概论 引言 在逆向工程领域&#xff0c;混淆技术是一种非常重要的技术手段&#xff0c;通过打破人们的思维惯性&#xff0c;使得逆向分析变得更加困难。本文将会介绍混淆技术的概念、分类及其应用&#xff0c;以及如何使用IPA Guard进行iOS IPA重签名。 混淆技术概述…...

pytest安装失败,报错Could not find a version that satisfies the requirement pytest

问题 安装pytest失败&#xff0c;尝试使用的命令有 pip install pytest pip3 install pytest pip install -U pytest pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple但是都会报同样的错&#xff1a; 解决方案 发现可能是挂了梯子的原因&#xff0c;关掉…...

使用 Maven 的 dependencyManagement 管理项目依赖项

使用 Maven 的 dependencyManagement 管理项目依赖项 介绍 在开发 Java 项目时&#xff0c;管理和协调依赖项的版本号是一项重要而繁琐的任务。 而 Maven 提供了 <dependencyManagement> 元素&#xff0c;用于定义项目中所有依赖项的版本。它允许您指定项目中每个依赖…...

三英战吕布web3游戏项目启动全流程

项目是一个学习相关的很好的例子并且开源&#xff0c;原本的项目是连接goerli网络&#xff0c;但我把它修改为可连接ganache网络的项目了&#xff0c;更方便启动。 智能合约部分 进入文件 hardhat.config.js &#xff0c;增加一个钱包私钥 2.执行npm install 3.测试合约 npx ha…...

TS中的类

目录 ES6的类 类的概念 类的构成 类的创建 声明 构造函数 定义内容 创建实例 TS中的类 类声明 构造函数 属性和方法 实例化类 继承 访问修饰符 public private protected 成员访问修饰符的使用原则 访问器 只读成员与静态成员 readonly static 修饰符总…...

玩转硬件之玩改朗逸中控设备

这是一个有关一件被拆卸的朗逸中控设备的故事。这个设备已经闲置多年&#xff0c;但是它的命运发生了转变。它被改装成了一台收音机和MP3播放器。 这个设备曾经是一辆朗逸的中控屏幕&#xff0c;就是因为它没有倒车影像&#xff0c;它就被拆了下来&#xff0c;被扔在了一个角落…...

根据MySql的表名,自动生成实体类,模仿ORM框架

ORM框架可以根据数据库的表自动生成实体类&#xff0c;以及相应CRUD操作 本文是一个自动生成实体类的工具&#xff0c;用于生成Mysql表对应的实体类。 新建Winform窗体应用程序AutoGenerateForm&#xff0c;框架(.net framework 4.5)&#xff0c; 添加对System.Configuration的…...

Mac上安装tensorflow介绍留存

此预版本为 macOS 11.0 提供了硬件加速的 TensorFlow 和 TensorFlow 插件。M1 Mac 和基于 Intel 的 Mac 通过 Apple 的 ML 计算框架支持本机硬件加速。 TensorFlow r2.4rc0TensorFlow Addons 0.11.2 TensorFlow 插件 0.11.2 REQUIREMENTS 要求 macOS 11.0Python 3.8 (requir…...

【赠书第16期】码上行动:用ChatGPT学会Python编程

文章目录 前言 1 ChatGPT简介 2 Python编程简介 3 使用ChatGPT学习Python编程 4 如何使用ChatGPT学习Python编程 5 推荐图书 6 粉丝福利 前言 随着人工智能技术的不断发展&#xff0c;聊天机器人已经成为我们日常生活和工作中不可或缺的一部分。其中&#xff0c;ChatGP…...

LeetCode 每日一题 2024/1/1-2024/1/7

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/1 1599. 经营摩天轮的最大利润1/2 466. 统计重复个数1/3 2487. 从链表中移除节点1/4 2397. 被列覆盖的最多行数1/5 1944. 队列中可以看到的人数1/6 2807. 在链表中插入最…...

7+单细胞+空转+实验验证,如何根据内容开展相关经验给你启发

导语 今天给同学们分享一篇生信文章“CD8 tissue-resident memory T cells induce oral lichen planus erosion via cytokine network”&#xff0c;这篇文章发表在Elife期刊上&#xff0c;影响因子为7.7。 结果解读&#xff1a; 单细胞RNA测序揭示了具有不同临床亚型的OLP的细…...

Verifiable Credentials可验证证书 2023 终极指南

1. 引言 Dock公司为去中心化数字身份领域的先驱者&#xff0c;其自2017年以来&#xff0c;已知专注于构建前沿的可验证证书&#xff08;Verifiable Credentials&#xff09;技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…...

R语言【sp】——SpatialPoints():创建类SpatialPoints或SpatialPointsDataFrame的对象

Package sp version 1.5-0 Description 从坐标或数据帧的坐标创建类 SpatialPoints-class 或 SpatialPointsDataFrame-class 的对象。 Usage SpatialPoints(coords, proj4stringCRS(as.character(NA)), bbox NULL)SpatialPointsDataFrame(coords, data, coords.nrs numeric…...

【Verilog】期末复习——简要说明仿真时阻塞赋值和非阻塞赋值的区别。always语句和initial语句的关键区别是什么?能否相互嵌套?

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...

分享一个idea插件MyBatisX的Bug

分享一个idea插件MyBatisX的Bug The plugin com.baomidou.plugin.idea. mybatisx failed to save settings and has been disabled. Please restart IntelliJ IDEAjava.lang.Throwableat com.intellij.openapi.project.DumbServiceImpl.queueTask(DumbServiceImpl.java:293)at…...

Linux网络

一、Linux网络 查看基础的网络配置 网关、路由&#xff1a;route —n 网关、路由route —nIP地址ifconfig ip aDNS 服务器cat /etc/resolv.conf主机名hostname网络连接状态ss、netstat、syn—sent域名解析nalookup、host 1.1 ifconfig 网络接口配置 临时性修改网卡 …...

Copilot 插件的使用介绍:如何快速上手

GitHub Copilot 本文主要介绍如何通过脚本工具激活 GitHub Copilot 插件&#xff0c;提供安装及激活图文教程&#xff0c;大家按下面操作即可激活GitHub Copilot插件&#xff0c;免费使用Ai编码工具 一、GitHub Copilot 介绍 GitHub Copilot 是由 GitHub 和 OpenAI 共同开发的…...

kubesphere和k8s的使用分享

文章目录 什么是kubernetesKubernetes的部分核心概念互式可视化管理平台与kubernetes的关系市面是常见的kubernetes管理平台 什么是kubesphereKubesphere默认安装的组件Kubesphere涉及的服务组件kubesphere的安装Kubesphere相关的内容 什么是kubernetes 就在这场因“容器”而起…...

macos m1如何安装指定版本的redis

安装指定版本的Redis在macOS M1上可以通过Homebrew进行操作。Homebrew是一个在macOS上管理软件包的常用工具。 要安装特定版本的Redis&#xff0c;请首先确保已经安装了Homebrew。然后&#xff0c;可以通过以下步骤安装指定版本的Redis&#xff1a; 步骤&#xff1a; 查找可用…...

python 多线程 守护线程

daemon线程&#xff1a;守护线程&#xff0c;优先级别最低&#xff0c;一般为其它线程提供服务。通常&#xff0c;daemon线程体是一个无限循环。如果所有的非daemon线程(主线程以及子线程&#xff09;都结束了&#xff0c;daemon线程自动就会终止。t.daemon 属性&#xff0c;设…...

以unity技术开发视角对android权限的讲解

目录 前言 Android权限分类 普通权限 普通权限定义 普通权限有哪些 危险权限 危险权限的定义 危险权限有哪些 动态申请权限实例 申请单个权限实例 第一步&#xff1a;在清单文件中声明权限 第二步&#xff1a;在代码中进行动态申请权限 申请多个权限实例 第一步&am…...

阿里建站官网/抖音优化公司

vscode怎么运行python代码,按下,代码,教程,你自己,相关文章 vscode怎么运行python代码 易采站长站&#xff0c;站长之家为您整理了vscode怎么运行python代码的相关内容。vscode怎么运行python代码 按下 Ctrl ShiftB 运行python代码。 前提是得配置taske.json 1、按下Ctrl Shift…...

asp网站部署 iis7/关键词推广seo怎么优化

那就先上几幅图吧。深圳40年灯光秀的照片吧。 每一张照片都是分为上下2个部分是吧。上面的部分&#xff0c;是一个一个立起来的高楼。如果你在深圳&#xff0c;在莲花山&#xff0c;很容易就能看出来。腾讯大厦就在那里。下面是显示的画面&#xff0c;是实际上播出的画面。我们…...

phpcms 多语言网站/网络营销策划方案范文

文章目录 最强解析面试题:合并两个排序的链表题目思路代码附录最强解析面试题:合并两个排序的链表 文章讲解 “ 合并两个排序的链表 ” 经典面试题,包含思路及源码,及解惑! 题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不…...

山西网站开发公司/湖南seo优化哪家好

单元格合并着实让人为难&#xff01; 使用的dev 的GridControl控件&#xff0c;实现数据绑定很方便&#xff0c;但是在网上查怎么都没有找到如何实现单元格的合并。所以只好作罢。 然后计划采用FlexCell&#xff0c;但是是付费的。使用了一下和Excel差类似&#xff0c;实现的样…...

顺德精品网站建设/广告外链平台

在各大网站看到的 自己整理的 awk学习实例 [rootlocalhost opt]# cat grade.txt M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 P.Bunny 02/99 48 green 12 35 28 J.Troll 07/99 4842 Brown-3 12 26 …...

郑州做网站最好的公司/网络产品及其推广方法

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />作为新兴的信息化应用软件——协同软件(Collaboration Software)&#xff0c;近年来在国内受到越来越多的学者和用户关注。协同软件是指那些以团队协作为目标的协作软件工具&…...