1、做项目时有一个在信号槽之间传递QVector<int>类型数据的需求,信号在界面线程发送,槽函数在工作线程运行,当按照正常流程写完代码后,发现槽没有对信号进行响应,上网搜索了一番,发现正常情况下信号与槽之间只能传递通用数据类型,如:int。像QVector<int>、结构体等类型就不能传递了,需要对复杂数据进行一些包装。
2、具体思路是:将复杂结构的数据包装成通用数据类型(QVariant)放入信号及槽函数中传递,在槽函数中使用时再转化为原来的数据类型。
(1)在信号所在类中:
a、包含头文件:
#include <QVector>
#include <QMetaType>
#include <QVariant>
Q_DECLARE_METATYPE(QVector<int>);
b、声明一个信号:
signals:
void signal_DelDataFromDatabase(QVariant);
c、在类的构造函数中注册数据:
qRegisterMet