QT中通過函數(shù) connect(objs, SIGNAL(sigFun()), objr, SLOT(slotFun())); 或者 connect( obj1 , &Object1::sigFun , obj2 , &Object2::slotFun ) 來連接信號與槽,傳遞數(shù)據(jù)
有時(shí)我們希望在槽函數(shù)中獲取發(fā)送信號的對象。可以通過函數(shù)“QObject::sender()”獲取發(fā)出信號的對象。
例如: 在菜單欄中動(dòng)態(tài)創(chuàng)建一系列的QAction,對應(yīng)最近打開文件 創(chuàng)建對應(yīng)的QAction
QList<QString> fileList;for (int i=0; i<fileList.size(); i++) { QAction *act = new QAction(fileList[i]); act->setData(fileList[i]); connect(act, SIGNAL(triggled()), this, SLOT(slotFun()));}這種情況,我們只知道出發(fā)了槽函數(shù),但是不知道具體是哪一個(gè)QAction發(fā)出的信號,此時(shí)可以通過上面所提到的函數(shù)來獲取發(fā)送對象
void slotFun(){ QAction act = qobject_cast<QAction*>(sender()); qDebug() << act->Data();}函數(shù)sender()的返回對象為QObject*,通過qobject_cast將其轉(zhuǎn)換為所需的對象。
新聞熱點(diǎn)
疑難解答