在Qt的emit()中传递指向自身的指针



我有一个处理文件传输的类。其中一个发射是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);
});

相关内容

  • 没有找到相关文章

最新更新