范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Qt多个信号关联同一个槽函数

  背景:多个信号需要执行同一个函数或者一类函数的时候,可以选择每个信号创建一个槽函数去实现功能,如果直接关联到一个函数中,该函数只能执行一份功能,有时候并不能满足业务需求
  在多个信号绑定到同一个槽函数的状态下,让槽函数根据绑定的不同的信号执行不同的功能有两种方法:
  (1)在槽函数中获取到sender对象,反向解析出信号的名称,分叉执行;
  (2)使用QSingalMapper类:管理多个信号,槽函数的处理相对变得简单。
  具体来看:
  (1)反向获取Sender名称
  关键函数: 1 QObject::sender()                  // 在槽函数中获取信号 2 QObject::setObjectName(QString)    // 给QObject对象设置名称 3 QObject::objectName()              // 获取QObject对象名称 4 QObject_cast(object)      // 强转对象类型
  思路如下:
  示例代码如下:  1 typedef enum{  2 BUTTON_1,  3 BUTTON_2,  4 BUTTON_3,  5 BUTTON_4  6 }BUTTON;  7    8  push_button_1->setObjectName(QString::number(BUTTON_1, 10));  9  push_button_2->setObjectName(QString::number(BUTTON_2, 10)); 10  tool_button_1->setObjectName(QString::number(BUTTON_3, 10)); 11  tool_button_2->setObjectName(QString::number(BUTTON_4, 10)); 12  connect(push_button_1, &QPushButton::clicked, this, &MyWidget::changeButton); 13  connect(push_button_2, &QPushButton::clicked, this, &MyWidget::changeButton); 14  connect(tool_button_1, &QToolButton::clicked, this, &MyWidget::changeButton); 15  connect(tool_button_2, &QToolButton::clicked, this, &MyWidget::changeButton); 16   17 void MyWidget::changeButton() 18 { 19     QObject *object = QObject::sender(); 20     QPushButton *push_button = qobject_cast(object); 21     QToolButton *tool_button = qobject_cast(object); 22     int index; 23     if(push_button) 24     { 25         QString object_name = push_button->objectName(); 26         index = object_name.toInt(); 27     } 28     else if(tool_button ) 29     { 30          QString object_name = tool_button->objectName(); 31          index = object_name.toInt(); 32     } 33   34     QString information = QString(""); 35     switch(index) 36     { 37     case BUTTON_1: 38         information = QString("clicked 1"); 39         break; 40   41     case BUTTON_2: 42         information = QString("clicked 2"); 43         break; 44   45     case BUTTON_3: 46         information = QString("clicked 3"); 47         break; 48   49     case BUTTON_4: 50         information = QString("clicked 4"); 51         break; 52   53     default: 54         information = QString("which is clicked?"); 55         break; 56     } 57     QMessageBox::information(NULL, QString("Title"), information); 58 }
  【领QT开发教程 学习资料,点击下方链接莬费领取↓↓ ,先码住不迷路~】
  点击→领取「链接」( 2 ) 使用QSignalMapper类
  这个思想是:希望能够在信号关联中直接传递一个参数!直接用信号槽无法实现
  QSignalMapper类内置了一个Map表,将Singnal和参数对应起来,然后多个信号关联到Mapper上,由mapper负责管理,并且mapper关联到槽函数中,将对应的参数传入槽函数
  这个流程图如下:
  实例代码如下:  1 QSignalMapper *signal_mapper = new QSignalMapper(this);  2 connect(push_button_1, &QPushButton::clicked, signal_mapper, &QSignalMapper::map);  3 connect(push_button_2, &QPushButton::clicked, signal_mapper, &QSignalMapper::map);  4 connect(tool_button_1, &QToolButton::clicked, signal_mapper, &QSignalMapper::map);  5 connect(tool_button_2, &QToolButton::clicked, signal_mapper, &QSignalMapper::map);  6    7 signal_mapper->setMapping(push_button_1, QString::number(BUTTON_1, 10));  8 signal_mapper->setMapping(push_button_2, QString::number(BUTTON_2, 10));  9 signal_mapper->setMapping(tool_button_1, QString::number(BUTTON_3, 10)); 10 signal_mapper->setMapping(tool_button_2, QString::number(BUTTON_4, 10)); 11 connect(signal_mapper, &QSignalMapper::mapped, this, &MyWidget::changeButton); 12   13 void MyWidget::changeButton(QString text) 14 { 15     int index = text.toInt(); 16     QString information = QString(""); 17     switch(index) 18     { 19     case BUTTON_1: 20         information = QString("clicked 1"); 21         break; 22   23     case BUTTON_2: 24         information = QString("clicked 2"); 25         break; 26   27     case BUTTON_3: 28         information = QString("clicked 3"); 29         break; 30   31     case BUTTON_4: 32         information = QString("clicked 4"); 33         break; 34   35     default: 36         information = QString("which is clicked?"); 37         break; 38     } 39     QMessageBox::information(NULL, QString("Title"), information); 40 } 41 20/article/details/81016424

英特尔酷睿i913900KS上市,三星推出5纳米主控固态硬盘6GHz酷睿i913900KS上市1月12日晚上,全球首款6GHz处理器英特尔酷睿i913900KS正式开卖,京东售价5999元,活动期间评价送100元E卡,折合5899元。酷睿i过年换机只考虑苹果?便宜4000多,华为OPPO新机不输iPhone14Pro正值年前换机热潮,不少朋友都准备在过年前给自己换一台新手机。而过年期间想要记录精彩瞬间,分享自己的动态,就需要一款影像实力强大的产品,才能满足消费者的需求。也正因如此,现在手机的影哪吒U广汽AIONY比亚迪元Plus,谁才是纯电SUV的智能课代表?去年10月,哪吒汽车旗下定位为超长续航智能纯电SUV的哪吒U正式上市,共推出四款车型,售价区间在12。98到15。98万元。与其他车辆配置不同,哪吒U在智能座舱上下足了功夫,打造都倒计时2年,微软计划于2025年淘汰支持部门诊断工具MSDTIT之家1月13日消息,Stardock工程师RafaelRivera深入挖掘最新发布的Win11Build25276预览版更新,发现微软计划在2025年淘汰诊断工具Microso春节换手机清单,推荐4款12256GB手机,每款都有高配置您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。现在人们每天使用手机的时间越来越长,在更换手机的时候,如果想要使手机运行速度快,不卡顿,选马云这辈子?人在做天在看!一次讲透功过是非,就问你服不服?如果我们要问你,马云跑路了吗?相信这个问题的答案毁誉参半。前段时间,马云旅居日本的消息引发关注,最近他又去了泰国,引起大家的猜测和议论。前两天发了一篇微头条马云这辈子,人在做天在看华为手机的5G有戏了,曝Mate60系列或满血回归!时隔两年,华为在去年9月发布了新款Mate系列华为Mate50系列,尽管依旧是4G手机,凭借着昆仑玻璃北斗卫星消息XMAGE影像等众多卖点,帮助华为手机活过来了。预计在3月份,华为好消息传来!中国移动推出新福利,所有用户都可免费用中国移动,相信大家都不陌生。作为我国三大运营商之一,拥有非常庞大的用户群体,还有悠久的历史。5G用户,也是逐年增加。截止到2022年11月份,5G用户数据已经接近6亿。这也说明了,比特币矿场是什么东西?概念,在中国合法吗?比特币矿场之前给大家介绍了比特币是什么,那么下面要接着给大家来介绍的就是比特币矿场,那么你了解什么是比特币矿场吗?其实所谓的比特币矿场非常容易理解,简单的来说,它就是一个集中管理矿十年前的2012,我们在用什么智能手机提起2012,不知道你脑海中会涌出什么回忆,是某部灾难片对世界末日的预言,还是在伦敦奥运会上刘翔因伤退赛的遗憾,亦或者是莫言在诺奖领奖台上的发言。当年的苹果还属于乔布斯的小而美时代一维空间及空间本质问题试探寻宇宙是一维的。人们常说三维空间,宇宙是三维的。古人云四方上下曰宇。四方上下,刚好三维。爱因斯坦常常建立空间三维坐标系研究探索宇宙问题。认为宇宙是三维空间的观念,实际就是来源三维坐标
无翅鱼来了!谈谈转基因工程给生活带来的影响日前,中科院水生所桂建芳院士团队发布最新研究成果,经一年多的努力,他们根据基因技术,利用鱼类精准育种技术创制出了无刺喜头鱼。那我们来说说转基因工程,转基因工程,也称为生物工程,是指深切缅怀2023年1月逝世的17位共和国两院院士从2023年1月1日2023年1月31日,统计有17位两院院士逝世。其中,中科院共5名院士,工程院共12名院士。2022年逝世的中国两院院士17位逝世院士中,最大年龄99岁,最小年无人问津的指令也能实现精准定位控制!导读S7200SMARTCPU提供了四种开环运动控制方法脉冲串输出(PTO)内置在CPU的速度和位置控制。此功能仅提供脉冲串输出,方向和限值控制必须通过应用程序使用PLC中集成的或图集花海大片上映!梅城春光梅景醉游人春节已过,寒意仍未褪去,梅江的梅花已悄悄绽放。枝头梅花盛开,分外好看。走进位于周溪河畔的客家公园里,还未见梅树,便已闻到一股清香。香味深处,一抹红色在深绿的山坡晕染开。梅景引得众多南沙紫花风铃木盛开,粉紫色花海火爆出圈春天将近,浪漫成海的盛花期将如期而至,百花争奇斗艳,陆续登场。位于南沙东涌镇马克村的紫花风铃木花开正盛,粉紫色的花海在这个初春火爆出圈,前来打卡的人络绎不绝。在这个季节,安排一场说拍到手机没电!广州2023年第一批花海,刷屏了!图源网友Cycble立春将至,花开报春梅花樱花郁金香广州2023第一批花海美出天际,你打卡了吗?一起徜徉春日花海感受广州花花世界的美好郁金香花1。192。10白云山云台花园云台花园媒体人新疆队外援克莱蒙斯ampampamp摩尔特里已到球队法尔2月初回归直播吧1月30日讯据媒体人卢鹏儒报道,新疆队外援克莱蒙斯和摩尔特里已到新疆,法尔预计2月初回归。原文写道新疆男篮在大年初四集结,在主帅邱彪的率领下,按照训练计划紧锣密鼓地开启了第三魔术师谈争议漏吹塔图姆都笑了因为他很惊讶裁判没有吹直播吧1月30日讯湖人昨日在客场121125加时不敌凯尔特人,常规时间最后一回合,詹姆斯突破上篮被塔图姆打手,但是裁判漏吹引发巨大争议。魔术师更推写道在输给凯尔特人的比赛中,裁判在2023年石家庄市篮球超级联赛昨晚落幕2023年石家庄市篮球超级联赛昨晚落幕篮球盛宴热血澎湃河北银行队获得联赛冠军1月29日晚,2023年石家庄市篮球超级联赛,在河北体育馆上演了决赛的巅峰对决,为省会球迷奉献一场精彩的詹皇队友加盟辽篮?杨鸣眼光的确很独,杜锋怕啥来啥CBA第3阶段的比赛就要开始了,目前卫冕冠军辽宁男篮,也是做出了很重要的决定,因为莫兰德伤势仍然没有恢复,无法进行有球训练,据传莫兰德已经,无缘辽篮的第三阶段比赛,那么辽篮内线,仍男篮揪出2大水货,或无缘12人大名单,乔帅心里清楚男篮揪出2大水货,或无缘12人大名单,乔帅心里清楚球迷都知道,中国男篮是公布了18人的大名单,如今中国男篮,现在可能会在2月中旬,公布最后的12人大名单,到时候肯定会有6名球员遭到