平湖模板网站建设公司,江西住房和城乡建设网站,品牌网站开发策划书,镇江网站建设和优化推广多少钱本文介绍Qt编程中采用signal传递自定义数据类型#xff08;结构体类型#xff09;。
Qt编程中可以通过signal传递标准类型#xff0c;如常见的int,QString,bool类型#xff0c;有时候需要传递特定的数据类型如结构体#xff0c;Qt是不支持直接传递的#xff0c;若将其分…本文介绍Qt编程中采用signal传递自定义数据类型结构体类型。
Qt编程中可以通过signal传递标准类型如常见的int,QString,bool类型有时候需要传递特定的数据类型如结构体Qt是不支持直接传递的若将其分开进行传递变量太多造成程序编写麻烦。这里介绍2种方法使signal可以传递自定义数据类型。 1.采用QVariant进行封装的方法
1)定义自定义数据类型
这里定义我们要传递的自定义数据类型即1个结构体类型。
typedef struct _TEST
{int a;int b;bool c;
}TEST;
Q_DECLARE_METATYPE(TEST);
注意这里需要采用Q_DECLARE_METATYPE()宏对新定义的类型进行声明。
2)定义相应的signal和slot
signals:
void sgnParams(QVariant var);//other classes
slots:
void slotParams(QVariant var);
这里的形参为QVariant类型因此我们要将新定义的类型封装成QVariant类型。
3)封装
因为我们要采用QVariant类型进行传递因此需要将结构体封装成QVariant类型。在相应的函数中采用如下方式处理
TEST test;
QVariant var;test.a 300;
test.b 200;
test.c false;var.setValue(test);Q_EMIT sgnParams(var);
4)读取
在对应的槽函数中对采用QVariant类型的数据进行读取。可采用如下方式进行处理
TEST test;if (var.canConvertTEST()) {test var.valueTEST();//process} 2.注册自定义数据类型的方法
1)定义自定义数据类型
这里定义我们要传递的自定义数据类型即1个结构体类型。
typedef struct _TEST
{int a;int b;bool c;
}TEST;
2)构造函数中注册新类型
qRegisterMetaTypeTEST(TEST);
在相应的构造函数种注册我们刚定义的新类型。
2)定义相应的signal和slot
signals:
void sgnParams(TEST test);//other classes
slots:
void slotParams(TEST test);
注意这里的形参直接采用自定义数据类型因为我们已经向系统注册了这种新类型。
3)发送
TEST test;test.a 300;
test.b 200;
test.c false;Q_EMIT sgnParams(test);
发送直接赋值即可。
4)接收
qDebug() test.a test.b test.c;接收直接获取形参值和标准类型操作一样的。 总结本文节介绍了Qt编程中采用signal传递自定义数据类型的2种方法。