QT自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题

更新时间:2023-06-14 03:04:29 阅读: 评论:0

QT⾃定义信号与信号槽⽅法及解决⾃定义数据类型或数组作
为函数参数的问题
笔者原来⼀直在windows下编程,近期转QT。对于原windows下的⾃定义消息传送,在QT 下⾃定义信号与信号槽是⼀个完美解决⽅案。
但由于笔者是⼀个⽣⼿,对⾃定义信号与信号使⽤也不是⼀帆风顺。现将过程中遇到的问题及解决⽅案记录下来,便于⽇后查看。
本⽂将从以下三个⽅⾯讲术:
(1)如何⾃定义信号与信号槽
(2)如何连接信号与信号槽
书法教案(3)如何解决在运⾏期间,连接信号与信号槽(Qt::QueuedConnection⽅式连接)问题。
详细过程:
(1)如何⾃定义信号与信号槽
不解释,直接上代码,如下:
------------------------------------------------------------------------------------------------
#include <QObject>
class CMYClass : public QObject
{
public:
XXXXXX
/**/
Q_OBJECT
signals:      //⾃定义信号,不需要在cpp中实现
int signal1(DWORD a);
蜡月
int signal2(char * tel,char * txt,char * timestamp);
湖北聊天室int signal3(BYTE a[5],BYTE b,BYTE c);
private slots: //⾃定义槽,接收信号,需要在cpp中实现餐饮服务流程
int onSignal1(DWORD a);
int onSignal2(char * tel,char * txt,char * timestamp);
int onSignal3(BYTE a[5],BYTE b,BYTE c);
};
------------------------------------------------------------------------------------------------
初中英语音标(2)如何连接信号与信号槽
代码
------------------------------------------------------------------------------------------------
若干名是什么意思
/
/连接信号槽
英国队
QObject::connect(this,SIGNAL(signal1(DWORD)),this,SLOT(onSignal1(DWORD)));
QObject::connect(this,SIGNAL(signal2(char * ,char * ,char *)),this,SLOT(onSignal2(char * ,char * ,char *)));
QObject::connect(this,SIGNAL(signal3(BYTE [5],BYTE ,BYTE )),this,SLOT(onSignal3(BYTE [5],BYTE ,BYTE )));
------------------------------------------------------------------------------------------------
需要注意两点:(1)连接时必须写出参数类型,但是不能写参数名;
(2)数组作为参数量,记录 XXX[ N],如下:
//信号
int signal3(BYTE a[5],BYTE b,BYTE c);
//槽函数
int onSignal3(BYTE *a,BYTE b,BYTE c);
//连接⽅法
QObject::connect(this,SIGNAL(signal3(BYTE [5],BYTE ,BYTE )),this,SLOT(onSignal3(BYTE [5],BYTE ,BYTE )(3)如何解决在运⾏期间,连接信号与信号槽(Qt::QueuedConnection⽅式连接)问题。
⼀般情况下上⾯连接⽅式不会出现问题,但是如果信号与槽在不同线程或Qt::QueuedConnection⽅式连接,可能会在连接期间报以下类似问题。
南瓜做法大全QObject::connect: Cannot queue arguments of type 'BYTE[5]'
(Make sure 'BYTE[5]' is registered using qRegisterMetaType().)
出现如此问题,在于QT对数据类型未知,按照料提⽰在连接信号与槽之前,调⽤ qRegisterMetaType()解决。直接上代码,如下:
------------------------------------------------------------------------------------------------------------
//连接信号槽
qRegisterMetaType<DWORD>("DWORD");    //向注册⾃定义数据类型
qRegisterMetaType<DWORD>("DWORD");
qRegisterMetaType<BYTE>("BYTE");
qRegisterMetaType<BYTE * >("BYTE[5]"); //请注意这⼀⾏,关于如何注册数组类型 (这样不⾏,最后槽传过来是指针的指针,求解决⽅法)
QObject::connect(this,SIGNAL(signal1(DWORD)),this,SLOT(onSignal1(DWORD)),Qt::QueuedConnection);
QObject::connect(this,SIGNAL(signal2(char * ,char * ,char *)),this,SLOT(onSignal2(char * ,char * ,char
*)),Qt::QueuedConnection);
QObject::connect(this,SIGNAL(signal3(BYTE [5],BYTE ,BYTE )),this,SLOT(onSignal3(BYTE [5],BYTE ,BYTE
)),Qt::QueuedConnection);

本文发布于:2023-06-14 03:04:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/949423.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   连接   问题   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图