設想這樣一種場景:共有5個button,button1~button5,點擊button1時輸出“button 1 clicked”,點擊button2時輸出“button 2 clicked”,該如何實現呢?
最粗暴的實現是寫5個slot,然后將button與slot分別connect,但這明顯會增加許多重復代碼,不是一種好的實現。
一種比較好的方式是使用QSignalMapper,它可以接收無參數的signal,然后重新發射出有參數的signal,這些參數的類型可以是int、QString、QWidget *或QObject *:
QSignalMapper *signalMapper = new QSignalMapper(this); connect(button1, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(button2, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(button3, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(button4, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(button5, SIGNAL(triggered()), signalMapper, SLOT(map())); signalMapper->setMapping(button1, 1); signalMapper->setMapping(button2, 2); signalMapper->setMapping(button3, 3); signalMapper->setMapping(button4, 4); signalMapper->setMapping(button5, 5); connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(printMsg(int)));
轉自:https://blog.csdn.net/imred/article/details/72940365
參考:https://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot