方法一:使用全局变量或全局函数,
使用全局变量或全局函数,在其他类或线程中调用,这是各种编程语言中都通用的方法,但全局变量长时间占用内存,影响程序空间使用率,且全局变量修改影响整个程序,程序的安全性无法保证,一般尽量少用全局变量或函数。
方法二:使用信号与槽
注意事项
- 只有QObject类及其派生的类才能使用信号和槽的机制 在线程间使用信号槽进行通信时,槽参数必须使用元数据类型的参数;
- 如果使用自定义的数据类型,需要在connect之前将其注册(qRegisterMetaType)为元数据类型;
- 线程间用信号槽传递参数的话,要加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为定义的名称。