如何使用QSignalMapper

简介: 如何使用QSignalMapper

QSignalMapper这个类并不是个新鲜概念, 早在Qt2里就已经存在, 而且它的功能也是始终如一。 不过由于宣传力度不够(例子里涉及到它的很少)了解这个类人可能还不是很多, 所以特此撰文介绍此类的功能和用法。


简单的理解,可以把SignalMapper这个类看成是信号的翻译和转发器, 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject*参数或者QWidget*参数的信号, 并将之转发。 这么一说大家有没有联想到该类的适用范围呢? 呵呵, 是不是一下就想到了如果我有一堆的button, 可以把clicked事件放在一个函数里处理, 只要给button编个号或者给button起个名就行了, 这样就不用给每个button写一个slot了,岂不是很方便?


QSignMapper *mapper = new QSignMapper(this)


QPushButton *btn1 = new QPushButton(this);


btn1->setText("btn1");


QPushButton *btn2 = new QPushButton(this);


btn2->setText("btn2");


mapper->setMapping(btn1,btn1->text());


mapper->setMapping(btn2,btn2->text());


connect(btn1,SIGNAL(clicked()),mapper,SLOT(map()));


connect(btn2,SIGNAL(clicked()),mapper,SLOT(map()));


connect(mapper,SIGNAL(mapped(QString),this,SLOT(myfunc(QString)));


整体的作用是通过一个无参的信号转化成有参的信号,然后传给槽函数进行操作。



相关文章
|
8月前
|
小程序 JavaScript
小程序bindtap 和 catchtap 的区别以及如何使用
小程序bindtap 和 catchtap 的区别以及如何使用
185 0
|
JavaScript 前端开发
this如何使用
"this" 是 JavaScript 中的关键字,它通常用于引用当前执行上下文中的对象。
52 0
|
XML JSON 编解码
|
IDE 开发工具 C++
如何使用VS
如何使用VS
103 0
|
消息中间件 Java API
如何使用 ArrayPool
如果不停的 new 数组,可能会造成 GC 的压力,因此在 aspnetcore 中推荐使用 ArrayPool 来重用数组,本文将介绍如何使用 ArrayPool。
186 0
如何使用 ArrayPool
|
监控 网络协议 数据安全/隐私保护
Wireshake简介与使用方法
1.wireshake简介 Wireshark是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
310 1
Wireshake简介与使用方法
|
分布式计算 Spark 开发者
SearchType 案例_演示 | 学习笔记
快速学习 SearchType 案例_演示
SearchType 案例_演示 | 学习笔记
|
SQL 分布式计算 HIVE
SearchType 案例演示|学习笔记
快速学习 SearchType 案例演示。
106 0
|
网络协议 程序员 测试技术
封装快速入门案例|学习笔记
快速学习封装快速入门案例
|
网络安全