你可以将按钮标识和要new的类对象指针建立映射,或者使用构造工厂
关于QSignalMapper,假定你已经建立了一个对象,其指针为signalMapper
假定button是创建一个QPushButton对象后的指针,在创建完每个QPushButton对象后建立如下链接:
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, xxx); //其中的xxx是为每个button设定不通的标识,例如可以设定为button的text之类
//可以是int类型,也可以是QString类型
而在signalMapper创建后使用如下链接,其中this->clicked(const QString&)是你的处理槽
connect(signalMapper, SIGNAL(mapped(const QString &)), this, SIGNAL(clicked(const QString &)));
这样一来,任何按钮被按下时,会触发QPushButton::clicked()信号,而后触发QSignalMapper::map()信号,而后由QSignalMapper抛出mapped()信号,触发我们自定义的clicked信号,并且在后一个过程中,是带参数标识的,我们现在就可以利用这个参数标识知道获取的是哪个按钮了
如果这时你又一个标识和类对象指针或者标识和构造工厂的映射,你就知道使用哪个对象或者使用哪个工厂创建你的对象了
呼呼,其实assistant中的介绍不难懂的,你得自己去试