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

Вопрос: Почему объект кнопки не получил сигнал sigKK() при нажатии кнопки? Когда излучается сигнал, могут ли все объекты qt получать этот сигнал? Код выглядит следующим образом: class PushButton : public QPushButton { Q_OBJECT signals: void sigKK(); }; Класс PushButton наследуется от QPushButton, но не соединяет здесь сигналы и слоты. Это правильно? class MainWindow : public

Вопрос:

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

Оцените статью
Добавить комментарий