Qt的信号/槽机制给我们编程带来了很大的便利。在多数的情况下,我们只需要一个信号对应一个槽就可以了。但有时候我们也会遇到多个信号对应一个槽的情况。比如说做一个计算器的小程序,界面上有10个按钮分别对应0 - 9这几个数字。按下这几个按钮处理的逻辑是类似的,所以我们完全没有必要为每一个按钮都写一个槽来对应按钮按下的信号。但是假如我们把10个按钮的按下信号都连接到一个槽函数中,那么槽函数又要怎么区分此时按下的是哪个按钮呢?要知道按钮的按下信号是不带参数的。
这时候QSignalMapper就能派生用场了。它可以将对象的信号转发一个槽函数中。那么具体该怎么使用呢?举个例子吧:
首先用QtCreator创建一个基于QWidget的程序,使用UI设计师在界面上拖6个按钮。
接下来我们将使用QSignalMapper将这6个按钮的信号都连接到一个槽函数中。创建QSignalMapper对象,并将它的mapped信号连接到一个槽函数中,这个槽就是我们用来处理6个按钮的地方。
mapped信号有4个不同参数的版本,根据需求自行选择。
2. 将QSignalMapper与按钮关联起来,使用QSignalMapper的setMapping函数。
setMapping有4个重载函数,参数类型与mapped信号的参数一一对应。
3. 将按钮的按下信号与QSignalM