Qt线程间数据通讯及数据共享

方法一:使用全局变量或全局函数,

使用全局变量或全局函数,在其他类或线程中调用,这是各种编程语言中都通用的方法,但全局变量长时间占用内存,影响程序空间使用率,且全局变量修改影响整个程序,程序的安全性无法保证,一般尽量少用全局变量或函数。

方法二:使用信号与槽

注意事项

  1. 只有QObject类及其派生的类才能使用信号和槽的机制 在线程间使用信号槽进行通信时,槽参数必须使用元数据类型的参数;
  2. 如果使用自定义的数据类型,需要在connect之前将其注册(qRegisterMetaType)为元数据类型;
  3. 线程间用信号槽传递参数的话,要加const,因为const文字常量存在常量区中,生命周期和程序一样长。这样可以避免slot调用的时候参数的运行期已过造成引用无效;

当使用自定义数据类型传递在线程间传递时,把本身定义的类型注册为元组类型,使用qRegisterMetaType()注册,要把这个函数放在connect()函数使用以前。

#include <QMetaType>//记得包含这个头文件
//my_type是我本身定义的类型
qRegisterMetaType<my_type>("test");
connect(this,&Mainwindows::signal_send,this,&Mainwindows::slot_receive);
void Mainwindow::signal_send(const my_type test)
{

}
void Mainwindow::slot_receive(const my_type test)
{

}

my_type为自定义类型,test为定义的名称。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值