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

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

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

方法二:使用信号与槽

注意事项

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

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

#include //记得包含这个头文件
//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为定义的名称。

你可能感兴趣的:(qt,开发语言)