【Qt】槽函数中获取发出信号的对象

核心:QObject::sender()
对于信号与槽的连接
connect( obj1 , SIGNAL(sigFun()) , obj2 , SLOT(slotFun()) )
或者
connect( obj1 , &Object1::sigFun , obj2 , &Object2::slotFun )
可以通过信号与槽函数的参数来传递数据

但是存在一些情况,我们希望能在slotFun()里去获得obj1对象指针
实际上可以通过Qt基类QObject::sender(),在槽函数里获得绑定的信号的来源对象,解决一些动态绑定信号与槽的情况下,非常有用

例子:
菜单栏中的最近打开文件列表
最近打开文件地址列表
QList<QString> FileList;
生成对应的QAction
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() ));
}
我们在QAction里动态setData了一些数据
正常情况,只能知道触发了菜单QAction,由于是动态创建的QAction,所以没办法在槽函数slotFun里确定是哪个QAction触发了这个槽,所以也就没办法获取act->Data()里的数据
那么在槽函数里使用QObject::sender(),我们就能获得触发该槽函数的信号的对象
slotFun()
{
QAction *act=qobject_cast<QAction*>(sender());//使用Qt的类型转换,将指针恢复为QAction类型
qDebug()<<act->Data();
}

猜你喜欢

转载自blog.csdn.net/shihoongbo/article/details/52816630