本文以示例的方式讲解,在qt中,自定义的结构体如何在多线程的信号槽之间传递
工具/原料
qt
vs
单线程
1、自定义结构体MyStruct定义用来接收信号的槽函数类,两个槽函数,一个是QString类型参数,一个是自定义类型参数
2、定义槽函数的实现,将收到的信息打印出来
3、定义发送信号的类,对应的有两个信号,一个是QString类型参数,一个是自定义类型参数
4、发送信号的函数体
5、绑定信号槽,然后分别发送QString类型的信号和自定义信号
6、查看输出界面,可以正常接收到信号,并打印信息
多线程
1、修改槽函数所在类,让它从QRu艘绒庳焰nnable继承,并实现run函数。为了在run函数中绑定信号槽,将信号所在类在构造函数中传入
2、设置自动删除,这样运行完线程后,会自动回收资源
3、在run函数中,绑定信号槽,并发送不同参数的信号为了区分在哪个线程执行,这里打印了线程号
4、在信号槽函数中,也加上线程号的打印
5、在main函数中通过QThreadPool来启动线程
6、查看运行结果,可以看到QString类型数据可以跨线程接收,但是自定义类型数据在绑定时就会提示错误
跨线程自定义类型解决方案一
1、自定义类型在跨线程信号槽传递时,会提示错误,但是在同一线程中传递就不会出错通过connet时,指定连接类型为直连,让信号和槽在同一个线程中执行
2、查看运行结果,没有再提示错误,并且自定义类型数据的信号和槽在同一个线程中运行
跨线程自定义类型解决方案二
1、在绑定信号槽其按,先注册自定义类型
2、查看运行结果,参数正常传递,并且信号和槽在不同的线程中处理