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

作者: admin 分类: Qt Gui 发布时间: 2013-01-31 14:39 ė3,047 浏览数 6没有评论
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
Qt 多线程的信号传递
QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, 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的元数据类型
qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT"); 
二、调用QObject::connect方法,连接信号和槽,这里要注意修改connect方法的第五个参数
QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT))); 
小结:Qt 中多线程信号传递 实例的内容介绍完了,希望本文能帮你解决问题。


只回答业务咨询点击这里给我发消息 点击这里给我发消息

王牌软件,兼职软件设计,软件修改,毕业设计。

本文出自 王牌软件,转载时请注明出处及相应链接。

本文永久链接: http://www.softwareace.cn/?p=156

0

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量