网络编程软件,百度seo查询系统,网站icp备案认证怎么做,wordpress 输出文章就目前使用C开发框架来说#xff0c;今天来讲述下MFC框架下与Qt框架下#xff0c;如何让多个控件响应统一消息处理方法。
功能#xff1a;假设有5个按钮#xff0c;需要响应同一个处理函数#xff0c;该如何实现呢#xff1f;
Qt方式
开发环境#xff1a;win10 VS201…就目前使用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_castQPushButton*(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开发程序媛~