2013-10-18 87 views
3

我正在創建一個項目,我不得不從一個類的構造函數創建一個Qt信號插槽連接到它初始化的類中。這是代碼的樣子。我希望下面提到的連接都能正常工作,但是從輸出結果來看,只有連接#1有效。 我的問題是如何使連接#2工作!Qt信號槽混淆

類A

class classA :public QWidget{ 
    Q_OBJECT 
public: 
    classA(){ 
      emit this->demoSignalA(); 
      } 
signals: 
    void demoSignalA(); 
public slots: 
    void demoSlotA(){qDebug()<<"SIGNAL FROM CLASS B"} 
}; 

B類

class classB :public QWidget{ 
    Q_OBJECT 
public: 
    classB(){ 
      classA *a = new classA; 
      connect(this, SIGNAL(demoSignalB()), a, SLOT(demoSlotA())); //WORKS 
      connect(a, SIGNAL(demoSignalA()), this, SLOT(demoSlotB())); //DOESN'T WORK 
      emit this->demoSignalB(); 
      } 
signals: 
    void demoSignalB(); 
public slots: 
    void demoSlotB(){qDebug()<<"SIGNAL FROM CLASS A";} 
}; 

MAIN

int main(int argc, char *argv[]){ 
    QApplication a(argc, argv); 
    ... 
    ... 
    classB b;      //INVOCATION INITIATED 

    return a.exec(); 

}

輸出

SIGNAL FROM CLASS B 

回答

6

如果按照編碼的序列,應該明確的是點在哪裏,你在ClassB的構造函數的第一行調用

emit this->demoSignalA(); 

,該連接尚未完成。如果連接尚未完成,則發出信號時不會執行插槽門檻。

在classB構造函數中,應該在連接完成後發出兩個信號。

(作爲一個原則問題,最好不要開始發射信號,直到你完成構造函數,但在這裏並不重要)