Вопрос:
Почему объект кнопки не получил сигнал 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 Лучший ответ:
Когда излучается сигнал, могут ли все объекты qt получать этот сигнал?
Нет. Когда сигнал испускается, он принимается только QObjects с подключенными к нему сигналами или слотами.
У вашего MainWindow и вашего PushButton есть сигнал с тем же именем… но они все еще разные сигналы. Они совершенно не связаны друг с другом. Когда MainWindow испускает sigKK, это не влияет на PushButton sigKK.
В вашем примере sigKK кажется совершенно ненужным. Возможно, вы могли бы вместо этого подключить clicked() непосредственно к действиям, которые вы хотите выполнить?
connect(button, SIGNAL(clicked()),this,SLOT(showRecv1())); connect(button, SIGNAL(clicked()),this,SLOT(showRecv2()));