2016-03-22 5 views
2
class MyMainWindow:public QMainWindow { 
    public: 
     MyWindow* myWindow() { return myWindow ;} 
    private: 
     MyWindow* myWindow; 
}; 

class MyWindow:public Qobject { 
    private slot: 
     void mySlot(); 
}; 

class MyWindow2: class QWidget { 
    public slot: 
     void refreshClick(); 
    signals: 
     signal1(); 
}; 

MyWindow2::MyWindow2(QMainWindow* parent) { 
    QPushButton* refresh; 
    QObject::connect(refresh,SIGNAL(clicked()), this, SLOT(refreshClicked())); 

    if(parent) { 
     QObject::connect(this,SIGNAL(signal1),parent->myWindow(),SLOT(mySlot)); 
    } 

}は、私たちは、私はスロットrefreshClickedから信号1を発するように合法であるかどうかを知りたいとも内からの信号を発するのいずれかの短所がある公共のスロットから

void MyWindow2::refreshClicked(){ 
    emit signal1(); 
} 

を信号を発することができますスロット

+1

はい、合法です。基本的には、接続されているすべてのスロットに対してただちに関数呼び出しを行います(スレッド間で発生する、または 'connect'呼び出しで指定した場合)。ただ好奇心から出て、どこに信号を発しますか? – hyde

+0

スロットを一般的な機能として扱い、同じ質問をもう一度尋ねます。 – vahancho

答えて

6

はい、問題はありません。しかし、あなたの唯一の目的が信号を「転送」することだけである場合、「着信」信号を発信している信号に直接接続することもできます。例:

connect(advisor , SIGNAL(hasAdvice()), 
     this  , SIGNAL(executeAdvice()) 
     ) 

ただし、これはコードの拡張性に必ずしも役立たないことに注意してください。

+0

素晴らしい、悪い編集。ありがとう –

関連する問題