0

目前我可以通过信号将对象传递给插槽。但是我无法通过相同的信号将相同的对象作为对插槽的引用

这是我将它作为对象传递的方式(这有效)

投币口:

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 参数替换插槽,但是插槽永远不会被调用。

4

2 回答 2

2

您提到用引用类型而不是显示的值类型替换插槽中的参数,但您没有提到更改信号参数类型。

信号和槽的方法签名必须匹配,因此如果槽需要引用类型,则信号也必须匹配:

connect(this, SIGNAL(QTUpdateEmployee(A::Employee&)), ptrForm, SLOT(EmployeeUpdates(A::Employee&)));

但是当将对象传递给信号时,您仍然可以像传递给普通方法一样传递它:

emit QTUpdateEmployee(objectValue);
于 2013-06-18T17:35:23.743 回答
0

发出引用(或指针)的问题是被引用对象的生命周期。如果连接排队(这不是由发送者决定的),则引用可能会变为无效,直到连接的插槽被执行。

如果您可以忍受这种“危险”,则可以在签名中使用指针。应该考虑智能指针。如果您不使用智能指针,您至少应该记录(在评论中写下)指针将有效多长时间(例如直到发送者死亡)。

于 2013-06-18T17:35:54.193 回答