Qt编程一个核心亮点就是信号槽机制,通过:

QMetaObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type=Qt::AutoConnection)

进行连接,此处不做详细介绍:

当我们传递一些自定义类型,比如类和结构体的时候,传递可能会出错,自己亲身体会,看到自己的信号槽已经关联了但是信号发出之后根本不会进入槽函数,因为这个信号槽是无效的,因为你自己定义的类型没有注册的话,信号槽机制将无法识别,解决办法就是进行如下操作进行注册

(1)首先包含头文件

#include <QMetaType>

(2)然后注册自自己定义的类型,比如定义结构体stTest

qRegisterMetaType<stTest>("stTest");

(3)进行正常信号槽连接

connect(sender, SIGNAL(sig_test(stTest)), accepter, SLOT(slo_test(stText)));

然后你就会发现信号发出时,槽得到了响应,然后就可以继续在槽函数中对自己传进来的数据进行后续处理了.

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐