类之间的信号/槽和类的设计

时间:2015-10-27 06:37:14

标签: c++ qt class-design signals-slots

假设我有以下几个类:

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将它发送到上面的类,......

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

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

1 个答案:

答案 0 :(得分:1)

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

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

或者,您可以使用事件,这样您就不必进行此链接(但您确定不知道谁正在捕获该事件)。文档here