Qt: почему connect() работает только в классе главного окна?
Вот простой код, который создает кнопку и назначает обработчик onclick:
auto btn = new QPushButton("CLICK ME");
connect(btn, SIGNAL(clicked()), this, SLOT(btn_Click()));
private slots:
void btn_Click() {
alert("clicked!");
}
Он работает так, как должен, если вызывается в главном окне класса. Однако, когда я пытаюсь сделать это в дочернем окне, нажатие кнопки ничего не делает. Дочернее окно показано так:
auto settingsWindow = new SettingsWindow();
settingsWindow->show();
Я думаю, это как-то связано с объектом-получателем, который теперь является другим окном. Но как я могу заставить это работать?
2 ответа
Решение
Чтобы иметь возможность объявлять сигналы / слоты в вашем собственном классе, вы должны включить в свой класс директиву Q_OBJECT:
class SettingsWindow {
Q_OBJECT
...
};
Вы должны добавить MACRO в класс SettingsWindow, чтобы разрешить получение сингла. Добавьте "Q_OBJECT", как показано ниже.
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget();
....