一、问题
Qt的信号槽只能传递通用数据类型,如:QImage、int、bool等,QVector不能当参数用信号槽进行传递,直接传递信号槽不响应,传递QVector需要先使用QVariant类对复杂数据进行封装。
二、解决步骤
1、信号类
1.1、在信号类中包含头文件
#include <QMetaType>
#include <QVariant>
Q_DECLARE_METATYPE(QVector<float>);
1.2、声明信号函数
signals:
void sig_Data(QVariant,QVariant);
1.3、在构造函数中注册数据
qRegisterMetaType<QVariant>("QVariant");
1.4、封装数据并发送信号
QVector<float> Var1,Var2;
QVariant dataVar1,dataVar2;
dataVar1.setValue(Var1);
dataVar2.setValue(Var2);
emit sig_Data(dataVar1,dataVar2);
2、槽函数类
2.1、声明槽函数
public slots:
void slot_Data(QVariang,QVariant);
2.2、连接槽函数
connect(sig_class,SIGNAL(sig_Data(QVariant,QVariant)),this,SLOTs(slot_Data(QVariant,QVar)));
2.3、定义槽函数
void slot_class::slot_Data(QVariant data1, QVariant data2)
{
QVector<float> D1 = data1.value< QVector<float> >();
QVector<float> D2 = data2.value< QVector<float> >();
// 然后就可以直接操作D1和D2
..........
}