吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1259|回复: 16
收起左侧

[求助] QT 不同CPP之间的自定义信号和槽

[复制链接]
隐藏英雄 发表于 2023-2-9 08:50
QT 在几个不同的CPP之间发送自定义信号来运行槽函数,在绑定信号的时候有几种写法?
比如下面这个 ,在绑定的时候 首先要new一个信号发送者 w。
[C++] 纯文本查看 复制代码
connect(w,SIGNAL(sl_IcoTest()), this, SLOT(CloseLoading()));

但是如果只是为了接收一个信号就必须要new一个对象吗,还是有别的方法不用new也可以接收信号

比如我再 one.cpp   里  适当的地方 发送了一个信号 emit sl_UpData();
我想在 two.cpp 里面接收这个信号,执行槽函数Data();
[C++] 纯文本查看 复制代码
connect(信号接收者, SIGNAL(sl_UpData()), this, SLOT(Data()));


这个信号接收者如果不new对象的话  要怎么写才可以编译?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hacker-无心 发表于 2023-2-9 09:52
创个全局静态对象?,应该吧我也不太懂
psvajaz 发表于 2023-2-9 10:39
使用QObject::connect绑定的信号槽,只能用在被实例的对象类向父级回调使用。
还有一点,没有实例化的对象,绑定信号槽,因为内容或线程都没有加载对象类无法触发任何事件

免费评分

参与人数 1吾爱币 +1 收起 理由
隐藏英雄 + 1 用心讨论,共获提升!

查看全部评分

Dioter 发表于 2023-2-9 12:16
 楼主| 隐藏英雄 发表于 2023-2-9 12:18

大佬可以举个例子吗
236A 发表于 2023-2-9 13:21
psvajaz 发表于 2023-2-9 10:39
使用QObject::connect绑定的信号槽,只能用在被实例的对象类向父级回调使用。
还有一点,没有实例化的对象 ...

这哥们说的很对  必须是对象啊  要不然拿什么来接收信号啊

免费评分

参与人数 1热心值 +1 收起 理由
隐藏英雄 + 1 用心讨论,共获提升!

查看全部评分

psvajaz 发表于 2023-2-9 13:36
用信息队列通讯,或者使用上级类接收回调信息,然后转发给同级类

免费评分

参与人数 1热心值 +1 收起 理由
隐藏英雄 + 1 谢谢@Thanks!

查看全部评分

JustSoso523 发表于 2023-2-9 14:56
我觉的你这个可以用设计模式  观察者模式来做  具体思路是有个ManageClass,你在ManagecCass ,现在需要A1  B1  C1 需要接收信息,则把A1  B1 C1 注册到ManageClass类中,你signal emit的时候接收对象时你的ManageClass  然后由ManageClass去分发消息。
像你说的如果不给recive 是不行的 ,人家语法就是这么定义的,就想int a=1  不能写成inter a=1一样。
有什么解决不了的想着加个中间层
MarioCrane 发表于 2023-2-9 21:27
如果不New的话是这样的,两种connect方式都可以,推荐第二种,也是官方推荐的信号槽连接方式
[C++] 纯文本查看 复制代码
ClassA a;
connect(&a, SIGNAL(b()), this, SLOT(b()));
connect(&a, &ClassA::b, this, &MainWindow::b);

点评

这样做是相当于把对象直接在栈空间了吧,new是放在堆空间。本质上区别不大,除了栈的速度略快一点,且空间远远比堆小  详情 回复 发表于 2023-2-12 08:47

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
隐藏英雄 + 2 + 1 谢谢你一直回答我的问题,虽然这个问题对我来说确实太难了,我就是又菜又爱.

查看全部评分

MarioCrane 发表于 2023-2-10 18:18
都是这么过来的,喜欢就坚持下去,大家一起交流一起学习 共同进步
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表