Qt 5 signal和slot

错误1,发射信号成功,connect成功,但是没有进入到slot执行时

提示:

QObject::connect: Cannot queue arguments of type ‘SomeDTO’
(Make sure ‘SomeDTO’ is registered using qRegisterMetaType().)

原因:当一个signal被放到队列中(queued)时,它的参数(arguments)也会被一起一起放到队列中(queued起来),这就意味着参数在被传送到slot之前需要被拷贝、存储在队列中(queue)中;为了能够在队列中存储这些参数(argument),Qt需要去construct、destruct、copy这些对象,而为了让Qt知道怎样去作这些事情,参数的类型需要使用qRegisterMetaType来注册(如错误提示中的说明)
参考:https://blog.youkuaiyun.com/wadfji/article/details/54406767

如果signal的参数是Vector,也要qRegisterMetaType。

错误2,connect编译错误,无法讲参数1从T*转换为…

提示:

C2664 “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 1 从“T *”转换为“const DataCore *”

原因:connect的第一个参数,是定义信号的类,而不是发射信号的类。信号在DataCore 中定义,在NetManager发射,connect的第一个参数应该是DataCore 的指针,而不是NetManager。

正确做法:在UI类中,connect(定义信号的类的指针,信号,信号目的地的类的指针,槽函数)
在UI类中,qRegisterMetaType

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值