我有一个处理文件传输的类。其中一个发射是finished()
信号
在父端,我想将这个finished()
信号连接到fileTransferFinished()
插槽但是我怎么知道哪个实例完成了呢?因为有很多人同时在运行……
我知道我可以使用QObject::sender()
方法来返回发射器,但是这样,我就不能访问我的实例的方法。
qDebug () & lt; & lt;"完成"<<QObject::发送方()-> getID ();
上面写着no member named getID in QObject
我想有我的指针内槽函数,这是可能的吗?
查看文档中Object::sender()
的原型:
QObject * QObject::sender() const
它返回一个指向QObject实例的指针,因此你将不能在返回值上调用getID()
方法。
在使用Object::sender()
之前,将其返回值强制转换为类的指针:
YourClass * sender_obj = qobject_cast<YourClass*>(QObject::sender());
qDebug() << "finished " << sender_obj->getID();
使用sender()
不是一个干净的解决方案。它打破了通常使用信号和插槽的模块化目的。
文档说:
警告:该函数违反了面向对象的模块化原则。
建议使用QSignalMapper
除了以前的解决方案,并且给定您正在使用Qt 5,另一个选择是使用lambda将对象传递到您的插槽:
connect(object, &YourClass::finished, [this, object]() {
fileTransferFinished(object);
});