gpt4 book ai didi

c++ - 类之间的信号/槽和类的设计

转载 作者:行者123 更新时间:2023-11-28 06:00:33 26 4
gpt4 key购买 nike

假设我有以下类(class):

class A:public QObject{
Q_OBJECT
...
signals:
void sendData(QString data);
}

class B:public QObject{
Q_OBJECT

public:
A a;
...
public slots:
void onSendData(QString);
signals:
void sendData(QString data);
}


class C:public QObject{
Q_OBJECT

public:
B b;
...
public slots:
void onSendData(QString);
signals:
void sendData(QString data);
}

.
.
.


class MainWindow:public QMainWindow{
Q_OBJECT

public:
LastClass lc;
public slots:
void onSendData(QString);//show data on ui
}

A 类挖掘数据,当它发现特殊数据时,它必须将其发送到 ui(mainwindow) ,因此它调用 sendData 信号,然后包含 A 实例的 B 类获取信号并从它的槽中将其发送到上课,...

如您所见,它会导致递归信号/槽发送和接收,我怀疑这是一个好的设计。

这是正确的方法还是我必须更改设计? (虽然在某些情况下很难改变设计)。(我不能使用继承,因为每个类都有不同的功能和不同的功能。)

最佳答案

这不是将信号连接到插槽的义务,在您的情况下,您可以直接在它们之间连接信号。例如在 B 类中:

CONNECT(a, SIGNAL(sendData(QString)), this, SIGNAL(sendData(QString)));

或者,您可以使用事件,这样您就不必创建此链(但您无法确定谁在捕捉事件)。文档 here .

关于c++ - 类之间的信号/槽和类的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33361355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com