簡體   English   中英

類之間的信號/插槽和類設計

[英]Signal/Slot between classes and Design of Classes

假設我有以下課程:

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)));

另外,您可以使用事件,這樣就不必建立此鏈(但是您不確定當時誰會捕獲事件)。 文檔在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM