手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

QT中自定义结构体,如何在多线程信号槽间传递

时间:2024-10-16 11:58:11

本文以示例的方式讲解,在qt中,自定义的结构体如何在多线程的信号槽之间传递

工具/原料

qt

vs

单线程

1、自定义结构体MyStruct定义用来接收信号的槽函数类,两个槽函数,一个是QString类型参数,一个是自定义类型参数

QT中自定义结构体,如何在多线程信号槽间传递

2、定义槽函数的实现,将收到的信息打印出来

QT中自定义结构体,如何在多线程信号槽间传递

3、定义发送信号的类,对应的有两个信号,一个是QString类型参数,一个是自定义类型参数

QT中自定义结构体,如何在多线程信号槽间传递

4、发送信号的函数体

QT中自定义结构体,如何在多线程信号槽间传递

5、绑定信号槽,然后分别发送QString类型的信号和自定义信号

QT中自定义结构体,如何在多线程信号槽间传递

6、查看输出界面,可以正常接收到信号,并打印信息

QT中自定义结构体,如何在多线程信号槽间传递

多线程

1、修改槽函数所在类,让它从QRu艘绒庳焰nnable继承,并实现run函数。为了在run函数中绑定信号槽,将信号所在类在构造函数中传入

QT中自定义结构体,如何在多线程信号槽间传递

2、设置自动删除,这样运行完线程后,会自动回收资源

QT中自定义结构体,如何在多线程信号槽间传递

3、在run函数中,绑定信号槽,并发送不同参数的信号为了区分在哪个线程执行,这里打印了线程号

QT中自定义结构体,如何在多线程信号槽间传递

4、在信号槽函数中,也加上线程号的打印

QT中自定义结构体,如何在多线程信号槽间传递

5、在main函数中通过QThreadPool来启动线程

QT中自定义结构体,如何在多线程信号槽间传递

6、查看运行结果,可以看到QString类型数据可以跨线程接收,但是自定义类型数据在绑定时就会提示错误

QT中自定义结构体,如何在多线程信号槽间传递

跨线程自定义类型解决方案一

1、自定义类型在跨线程信号槽传递时,会提示错误,但是在同一线程中传递就不会出错通过connet时,指定连接类型为直连,让信号和槽在同一个线程中执行

QT中自定义结构体,如何在多线程信号槽间传递

2、查看运行结果,没有再提示错误,并且自定义类型数据的信号和槽在同一个线程中运行

QT中自定义结构体,如何在多线程信号槽间传递

跨线程自定义类型解决方案二

1、在绑定信号槽其按,先注册自定义类型

QT中自定义结构体,如何在多线程信号槽间传递
QT中自定义结构体,如何在多线程信号槽间传递

2、查看运行结果,参数正常传递,并且信号和槽在不同的线程中处理

QT中自定义结构体,如何在多线程信号槽间传递
© 手抄报圈