QSignalMapper类收集了一系列的无参信号,然后使用相对于信号发送者来说的整数、字符串或控件参数来重新发送它们。
其实,该类的一个典型的使用场合是,大量控件都要相应槽函数,而这些槽函数的实现又大致相同。这种情况下,最直接的办法就是仍然为每一个控件的相应信号创建一个槽函数。但这会导致代码的大量重复。此时,我们就可以使用QSignalMapper来实现这种需求。
QSignalMapper类支持使用setMapping()函数将一个特定的整数或字符串和一个特定的对象关联起来。然后,可以将对象的信号连接到QSignalMapper对象的map()槽函数上,而map()槽函数又会使用与对象相关联的整数或字符串来发送mapped()信号。所以,我们只要将我们定义的一个槽函数连接到mapped()信号,即可处理大量相似控件的槽函数。
下面,我们以一个例子来说明。其界面如下:
初始化界面的代码如下:
void Widget::InitUi()
{
names << "宋江" << "卢俊义" << "吴用" << "公孙胜"
<< "关胜" << "林冲" << "秦明"