Qt多线程间信号和槽连接及自定义型信号参数

Qt 多线程信号传递

 
 
  1. QObject::connect(const QObject * sender, const char * signal, 
  2. const QObject * receiver, const char * method, 
  3. Qt::ConnectionType type = AutoConnection); 

这个函数默认(即最后一个参数type为AutoConnection)情况下只能在相同线程下的不同类之间传递信号,若想要把信号传递给另外一个线程下运行的类实例,必须要修改type的枚举值。

可以改为Qt::QueuedConnection,这样就能传递给其他线程下的类实例了。

另外,对于带参数的消息,参数的数据类型必须为Qt支持的元数据类型,如int、QString等,若要传递自定义的数据类型,必须把自定义的数据类型注册为元数据类型。

举个例子,比如我再两个线程下分别运行了两个类实例MainWindow *mainWnd和Manager *mngr,MainWindow把方法addUsers(LPHOSTSTRUCT )设为槽,Manager把方法NewUserCome(LPHOSTSTRUCT )设为消息,其中LPHOSTSTRUCT为自定义的数据类型。要是想在Manager中顺利的使用emit NewUserCome(lpHost)(lpHost为LPHOSTSTRUCT的一个实例),就要经过两步

一、注册LPHOSTSTRUCT为Qt的元数据类型

 
 
  1. qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT"); 

二、调用QObject::connect方法,连接信号和槽,这里要注意修改connect方法的第五个参数

 
 
  1. QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT))); 

小结:Qt 多线程信号传递 实例的内容介绍完了,希望本文能帮你解决问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值