问:为什么connect()只在主窗口类中工作?

Ale*_*lex 0 c++ events qt signals slots

这是一个简单的代码,它创建一个按钮并分配一个onclick处理程序:

auto btn = new QPushButton("CLICK ME");
connect(btn, SIGNAL(clicked()), this, SLOT(btn_Click()));

private slots:
void btn_Click() {
    alert("clicked!");
}
Run Code Online (Sandbox Code Playgroud)

如果在主窗口类中调用它,它应该工作.但是,当我尝试在子窗口中执行此操作时,单击该按钮不会执行任何操作.子窗口如下所示:

auto settingsWindow = new SettingsWindow();
settingsWindow->show();
Run Code Online (Sandbox Code Playgroud)

我猜它以某种方式与接收器对象连接,接收器对象现在是一个不同的窗口.但是我怎样才能让它发挥作用呢?

小智 5

为了能够在您自己的类中声明信号/槽,您应该在您的类中包含Q_OBJECT指令:

class SettingsWindow {
        Q_OBJECT

        ...
};
Run Code Online (Sandbox Code Playgroud)