Qt线程之间通过signal和slot传递数据

4 篇文章 0 订阅

Qt线程之间通过signal和slot传递数据

​ 这种方法主要是为了设置自己定义的数据类型,在不同的线程之间进行通信。如果自己定义的数据类型未经处理之间传递会报如下错误:

QObject::connect: Cannot queue arguments of type 'TextAndNumber' (Make sure 'TextAndNumber' is registed using qRegisterMetaType().) 

​ 当一个signal被放到队列中(queued)时,它的参数(arguments)也会被一起一起放到队列中(queued起来),这就意味着参数在被传送到slot之前需要被拷贝、存储在队列中(queue)中;为了能够在队列中存储这些参数(argument),Qt需要去construct、destruct、copy这些对象,而为了让Qt知道怎样去作这些事情,参数的类型需要使用qRegisterMetaType来注册。

​ 当自己定义的数据需要在线程之间传递的时候,需要加上以下几个步骤,以自己定义的数据类型 std::vector 为例。

①包含头文件 #include

②在头文件末尾,#endif上面加入声明 Q_DECLARE_METATYPE(std::vector)

③在main()函数中去注册这种数据类型。qRegisterMetaType

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值