在学习QT和工程中,经常会用到将线程间的数据传输到另外的线程或者对象中,方便之后的数据使用和处理。但是想不同线程间通过QT中信号和槽的机制可以完成除“结构体”之外数据类型的传递任务。但是实际上,一次的传输有可能出现的是集中情况,在这种情况下,发送结构体有些不太方便:
1、单一数据类型、多数据发送(eg. double A,double B,.............,doubleAB)
如果可以将QT工程使用QVector等类似于C++ stl标准库,QT继承重写的,用法类似于C++ 中vector的用法
eg:
QVector<double> offset_x(3,1);
之后就可以使用信号和槽,不同之处,可以发送QT中的变量,QVector<QString> temp_str01;还不错。
2、对于多种数据类型、多组数据(eg:double, int, QString, double)
这时还暂时不需要结构体的方法,如果对于速度传输要求不是特别的高,那么可以将这些数据进行“封包”处理成QString,使用信号和槽进行发送数据。之后再接收的槽函数中,可以完成响应的“分包”重新定义变量,重新赋值。
在这里就是讲产品型号和序列号同时封包
之后再接受的槽函数中进行拆包进行解析,重新定义,进行重新定义变量,然后就可以使用了。优点,感觉变焦方便;缺点,有解析这一步,比起结构体直接访问元素还是要差一点。(直观感受,没有详细测试)
3、最后一种方法,如果出现了大量的数据传输,可以使用结构体,不过需要做一些操作:
qRegisterMetaType:注册元类型主要是在定义信号槽的时候,传递的参数类型不一定是QT所识别的,QT不识别的就要先注册以下,让QT能够认识,就是用qRegisterMetaType注册。我的理解就是,先不需要QT的编译器知道信号和槽所要传递的数据类型,进行先期定义,QVariant经过实际的验证,是可以进行在信号和槽中完成结构体的传递的。下方链接可以看一下