(轉)Qt使用connect函數時向slot傳遞參數


設想這樣一種場景:共有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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM