QSignalMapper这个类并不是个新鲜概念, 早在Qt2里就已经存在, 而且它的功能也是始终如一。 不过由于宣传力度不够(例子里涉及到它的很少)了解这个类人可能还不是很多, 所以特此撰文介绍此类的功能和用法。
简单的理解,可以把SignalMapper这个类看成是信号的翻译和转发器, 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject*参数或者QWidget*参数的信号, 并将之转发。 这么一说大家有没有联想到该类的适用范围呢? 呵呵, 是不是一下就想到了如果我有一堆的button, 可以把clicked事件放在一个函数里处理, 只要给button编个号或者给button起个名就行了, 这样就不用给每个button写一个slot了,岂不是很方便?
下面这段代码就实现了该功能:
//mainwin.h
class MainWin : public QWidget
{
Q_OBJECT
public:
MainWin(QWidget *parent = 0);
private slots:
void doClicked(const QString & btnname);//处理最终信号的槽
private: QSignalMapper *signalMapper;
};
//mainwin.cpp
MainWin::MainWin(QStringList texts, QWidget *parent) : QWidget(parent)
{
QString buttontext = "btn1,btn2,btn3,bt