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、修改槽函数所在类,让它从QRunnable继承,并实现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中自定义结构体,如何在多线程信号槽间传递
  • C#.Net如何实现定时器每小时的30分钟执行一次
  • 一个命令轻松修复桌面图标缓存
  • centos7如何开机设置为命令行启动呢?
  • win10如何设置作为服务登录权限?
  • 怎样使用LLTD链路层发现协议查看网络拓扑图
  • 热门搜索
    海尔电视机怎么样 家常年夜饭菜谱 怎么把照片内存变小 健身方法 晕车怎么办最有效方法 白带像豆腐渣怎么回事 qq怎么好友恢复 怎么才能不怀孕 小青菜怎么炒好吃 对联大全