目前我可以通过信号将对象传递给插槽。 但是,我无法通过相同的信号传递相同的对象作为对插槽的引用
以下是我如何将其作为对象传递(这有效)
插槽:
void SomMethod(A::Employee hcol);
声明和注册:
Q_DECLARE_METATYPE(A::Employee);
qRegisterMetaType<A::Employee>();
信号连接
connect(this,SIGNAL(QTUpdateEmployee(A::Employee)),ptrForm,SLOT(EmployeeUpdates(A::Employee)));
现在我无法将Employee作为参考传递任何关于我应该尝试的建议。我尝试用Reference参数替换插槽然后插槽永远不会被调用。
答案 0 :(得分:2)
您提到使用引用类型而不是显示的值类型替换插槽中的参数,但您没有提及更改信号参数类型。
信号和插槽的方法签名必须匹配,因此如果插槽需要参考类型,那么信号也必须:
connect(this, SIGNAL(QTUpdateEmployee(A::Employee&)), ptrForm, SLOT(EmployeeUpdates(A::Employee&)));
但是当将对象传递给信号时,您仍然可以像通常的方法一样传递它:
emit QTUpdateEmployee(objectValue);
答案 1 :(得分:0)
发出引用(或指针)的问题是引用对象的生命周期。如果连接排队(发件人未决定),则在执行连接的插槽之前,引用可能无效。
如果你能忍受这种“危险”,你可以在签名中使用指针。应该考虑智能指针。如果你不使用智能指针,你至少应该记录(写在注释中)指针有效的时间长度(例如,直到发送者死亡)。