隐藏英雄 发表于 2023-2-9 08:50

QT 不同CPP之间的自定义信号和槽

QT 在几个不同的CPP之间发送自定义信号来运行槽函数,在绑定信号的时候有几种写法?
比如下面这个 ,在绑定的时候 首先要new一个信号发送者 w。
connect(w,SIGNAL(sl_IcoTest()), this, SLOT(CloseLoading()));
但是如果只是为了接收一个信号就必须要new一个对象吗,还是有别的方法不用new也可以接收信号

比如我再 one.cpp   里适当的地方 发送了一个信号 emit sl_UpData();
我想在 two.cpp 里面接收这个信号,执行槽函数Data();
connect(信号接收者, SIGNAL(sl_UpData()), this, SLOT(Data()));

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

Hacker-无心 发表于 2023-2-9 09:52

创个全局静态对象?,应该吧我也不太懂

psvajaz 发表于 2023-2-9 10:39

使用QObject::connect绑定的信号槽,只能用在被实例的对象类向父级回调使用。
还有一点,没有实例化的对象,绑定信号槽,因为内容或线程都没有加载对象类无法触发任何事件

Dioter 发表于 2023-2-9 12:16

多线程通信A.A

隐藏英雄 发表于 2023-2-9 12:18

Dioter 发表于 2023-2-9 12:16
多线程通信A.A

大佬可以举个例子吗

236A 发表于 2023-2-9 13:21

psvajaz 发表于 2023-2-9 10:39
使用QObject::connect绑定的信号槽,只能用在被实例的对象类向父级回调使用。
还有一点,没有实例化的对象 ...
这哥们说的很对必须是对象啊要不然拿什么来接收信号啊

psvajaz 发表于 2023-2-9 13:36

用信息队列通讯,或者使用上级类接收回调信息,然后转发给同级类

JustSoso523 发表于 2023-2-9 14:56

我觉的你这个可以用设计模式观察者模式来做具体思路是有个ManageClass,你在ManagecCass ,现在需要A1B1C1 需要接收信息,则把A1B1 C1 注册到ManageClass类中,你signal emit的时候接收对象时你的ManageClass然后由ManageClass去分发消息。
像你说的如果不给recive 是不行的 ,人家语法就是这么定义的,就想int a=1不能写成inter a=1一样。
有什么解决不了的想着加个中间层

MarioCrane 发表于 2023-2-9 21:27

如果不New的话是这样的,两种connect方式都可以,推荐第二种,也是官方推荐的信号槽连接方式
ClassA a;
connect(&a, SIGNAL(b()), this, SLOT(b()));
connect(&a, &ClassA::b, this, &MainWindow::b);

MarioCrane 发表于 2023-2-10 18:18

都是这么过来的,喜欢就坚持下去,大家一起交流一起学习 共同进步
页: [1] 2
查看完整版本: QT 不同CPP之间的自定义信号和槽