Qt: почему моя кнопка не получает сигнал?


Почему объектbutton не получил сигнал 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
1 2

1 ответ:

Когда испускается сигнал, могут ли все объекты qt принимать этот сигнал ?

Нет . Когда сигнал испускается, он принимается только QObjects с подключенными к нему сигналами или слотами.

Ваше главное окно и ваша кнопка имеют сигнал с тем же именем... но это все-таки разные сигналы. Они совершенно не связаны друг с другом. Когда MainWindow излучает sigKK, это не влияет на sigKK кнопки.

В вашем примере sigKK, по-видимому, совершенно излишне. Может быть, вы могли бы вместо этого подключить clicked() непосредственно к действиям, которые вы хотите выполнить?

connect(button, SIGNAL(clicked()),this,SLOT(showRecv1()));
connect(button, SIGNAL(clicked()),this,SLOT(showRecv2()));