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

时间:2012-04-18 10:27:49

标签: c++ qt events signals slots

这是一个简单的代码,它创建一个按钮并分配一个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 个答案:

答案 0 :(得分:5)

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

class SettingsWindow {
        Q_OBJECT

        ...
};

答案 1 :(得分:2)

您应该在类设置窗口中添加MACRO以启用信号接收。 像下面这样添加“Q_OBJECT”。

class MainWidget : public QWidget
{
    Q_OBJECT
    public:
    MainWidget();
....