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();
....
Другие вопросы по тегам