查看完整版本: [-- QT有没有类似安卓EventBus的功能 --]

QTCN开发网 -> Qt基础编程 -> QT有没有类似安卓EventBus的功能 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

qq2632671 2020-08-24 09:24

QT有没有类似安卓EventBus的功能

在Qt中使用信号于槽,但这里有个问题,当我的工程比较复杂时,比如

D是C的类成员,C是B的类成员,B是A的类成员;
T4是T3的类成员,T3是T2的类成员,T2是T1的类成员;

然后D有个QString需要传递给T4,那我不得不进行一大串的信号与曹的连接,即D->C->B->A->T1->Y2->T3->T4;

而实际情况因为工程比较大,信号于槽的连接比这个还要复杂,我想问下有没有类似安卓EventBus的这种机制,不需要显示的连接

jack_zhang 2020-08-24 10:17
是不是可以不用信号槽的方式?
创建一个socket类,用来两个类的交互?

gnibuoz 2020-08-24 10:50
没有现成的,但是这个自己造一个也很简单啊,可以创建一个如下的专门用来处理复杂信号槽的单例类,然后在有该种需求的时候,只需要引入这个头文件,然后用这个单例类里边的信号来通信就可以了,触发的时候直接Observer::instance()->somethingChanged("我是参数");然后在接收方直接connenct这个单例的信号就好了
  1. /// Observer.h
    /**
       观察者单例类
    **/
    struct Observer : QObject{
        Q_OBJECT
    public:
        static Observer* instance()
        {
        static Observer _;
        return &_;
        }

    signals:
    void somethingChanged(const QString& content);

    private:
        Observer(){}
    }


青空飞羽 2020-08-24 14:09
直接将D和T4进行信号槽连接呢,为啥要中转那么多次呢

cj123sn 2020-08-25 13:38
globalSignal 单例

九重水 2020-08-25 14:31
3楼正解!直接对接D和T4,中间的雨女无瓜。
connect(A->B->C->D, SIGNAL(...), T1->T2->T3->T4, SLOT(....))


qq2632671 2020-08-25 15:51
九重水:3楼正解!直接对接D和T4,中间的雨女无瓜。[表情]
connect(A->B->C->D, SIGNAL(...), T1->T2->T3->T4, SLOT(....))
 (2020-08-25 14:31) 

你们的类成员都是公有的嘛。。。。。。

一个类包有两个类成员A和T1,那A的类成员B,你怎么写?

qq2632671 2020-08-25 15:54
青空飞羽:直接将D和T4进行信号槽连接呢,为啥要中转那么多次呢 (2020-08-24 14:09) 

假设一个类,类成员有A和T1,那要想链接D和T4,该怎么写?

像5楼说的那样connect(A->B->C->D,signals,T1->T2->T3->T4,slots);?

你们的类成员都是公有的嘛?


青空飞羽 2020-08-25 16:09
qq2632671:假设一个类,类成员有A和T1,那要想链接D和T4,该怎么写?
像5楼说的那样connect(A->B->C->D,signals,T1->T2->T3->T4,slots);?
....... (2020-08-25 15:54)

如果类成员是公有的就可以直接访问,如果不是,可以封装一个公有方法返回类成员的引用或指针

九重水 2020-08-26 09:12
8楼正解。
另外友元好像也可以,我忘了C++友元的用法。最近在写C

luansxx 2021-09-26 17:15
我自己实现了一个,有需要的试试看,好用的话,别忘了给个 star

https://github.com/cmguo/QtEventBus



查看完整版本: [-- QT有没有类似安卓EventBus的功能 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled