2011-11-03 46 views
1

我是Qt開發新手,我們的設計在幾個地方使用has-a關係。在某些情況下,容器應該暴露內部物體的信號,然後我現在爲每個這樣的信號編寫了一個專用插槽,在那裏我再次發出信號。 Qt中是否有一些快捷方式可以幫助公開容器內部對象的信號?Qt中有關係和信號

回答

5

您不必創建用於重新發送信號的插槽,就可以將信號與另一個信號連接。這樣您將避免插槽定義。

所以在你的容器你會是這樣的:你必須重新定義你的容器上的信號

connect(object, SIGNAL(signal1()), this, SIGNAL(signal1())); 

當然。

欲瞭解更多詳細信息,請檢查signal slot documentation

5

documentation

只要你想一個插槽可以連接儘可能多的信號,一個信號可以連接到儘可能多的插槽,你需要。甚至可以將信號直接連接到另一個信號。 (這將立即發出每當第一發射第二信號。)

以下是合法的:

connect(sender, SIGNAL(originalSignal()), SIGNAL(newSignal())); 
-1

如果它是你的類的內部結構,你爲什麼不讓它朋友類。那麼你可以直接在你的內部結構裏面呼叫emit parentObj->signal()

+0

你會解釋你downvote? –

0

信號的重新發射也允許重新發射多個信號。

testclass.h:

#include <QObject> 
#include <QDebug> 

class TestClass : public QObject 
{ 
Q_OBJECT 
public: 
    explicit TestClass(QObject *parent = 0) 
    { 
     connect(this, SIGNAL(signal1()), this, SIGNAL(signal2())); 
     connect(this, SIGNAL(signal1()), this, SIGNAL(signal2())); 
     connect(this, SIGNAL(signal2()), this, SLOT(slot())); 
    } 
    void emitSignal1() 
    { 
     emit signal1(); 
    } 

signals: 
    void signal1(); 
    void signal2(); 

public slots: 
    void slot() 
    { 
     qDebug() << "SLOT HAS BEEN CALLED"; 
    } 
}; 

main.cpp中:

#include <QCoreApplication> 
#include "testclass.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    TestClass instance; 

    instance.emitSignal1(); 

    return a.exec(); 
} 

其結果是,所述狹槽在這種情況下調用兩次。