一、问题

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

..........

}