假设我有以下几个类:
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(主窗口),因此它调用sendData信号,然后是包含A实例的B类,抓取信号并从中获取信号。 slot将它发送到上面的类,......
正如您所看到的,它会导致递归信号/插槽发送和接收,我怀疑这是一个很好的设计。
这是正确的方式还是我必须改变设计? (虽然在某些情况下很难改变设计)。 (我不能使用继承,因为每个类都有不同的功能和不同的功能。)
答案 0 :(得分:1)
这不是将信号连接到插槽的义务,在您的情况下,您可以直接连接它们之间的信号。例如在B类中:
CONNECT(a, SIGNAL(sendData(QString)), this, SIGNAL(sendData(QString)));
或者,您可以使用事件,这样您就不必进行此链接(但您确定不知道谁正在捕获该事件)。文档here。