2

ボタンがクリックされたときに、ボタンオブジェクトが sigKK() シグナルを受信しなかったのはなぜですか?

シグナルが送信されると、すべての qt オブジェクトがこのシグナルを受信できますか?

コードは次のとおりです。

class PushButton :  public QPushButton
{
    Q_OBJECT
signals:
    void sigKK();
};

PushButton クラスは QPushButton から継承しますが、ここではシグナルとスロットを接続しません。これは正しいですか?

class MainWindow : public QMainWindow
{
    Q_OBJECT    
public:
    explicit MainWindow(){
        resize(400,200);    
        connect(this,SIGNAL(sigKK()),this,SLOT(showRecv1()));   

        button = new PushButton();
        button->setText("Hello,All");
        button->resize(40,15);
        connect(button, SIGNAL(clicked()),this,SLOT(buttonCK()));
        connect(button, SIGNAL(sigKK()),this,SLOT(showRecv2()));
            //**I can connect sigKK signal with showRecv2 slot here ?**** 
        button->show();
    }
    ~MainWindow(){      
    }
signals:
    void sigKK();
public slots:
    void showRecv1(){
        cout<<"recved 1"<<endl;
        resize(100,100);
    }
    void showRecv2(){
        cout<<"recved 2"<<endl;
        button->setText(".....");
    }
    void buttonCK(){
        emit sigKK();
        cout<<"emited"<<endl;
    }
private:
    PushButton *button ; 
};
#endif
4

1 に答える 1

1

シグナルが送信されると、すべての qt オブジェクトがこのシグナルを受信できますか?

いいえ。シグナルが送信されると、シグナルまたはスロットが接続された QObject のみがシグナルを受信します。

MainWindow と PushButton の両方に同じ名前のシグナルがありますが、それでもシグナルは異なります。それらは互いにまったく無関係です。MainWindow がsigKKを発行しても、PushButton の には影響しませんsigKK

あなたの例では、sigKK完全に不要なようです。おそらく、代わりclicked()に、実行したいアクションに直接接続できますか?

connect(button, SIGNAL(clicked()),this,SLOT(showRecv1()));
connect(button, SIGNAL(clicked()),this,SLOT(showRecv2()));
于 2013-03-07T02:48:21.167 に答える