0

这是一个创建按钮并分配 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();

我猜它以某种方式与现在是不同窗口的接收器对象相关联。但是我怎样才能让它工作呢?

4

2 回答 2

5

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

class SettingsWindow {
        Q_OBJECT

        ...
};
于 2012-04-18T10:41:40.113 回答
2

您应该在类 SettingsWindow 中添加一个 MACRO 以启用信号接收。添加“Q_OBJECT”,如下所示。

class MainWidget : public QWidget
{
    Q_OBJECT
    public:
    MainWidget();
....
于 2012-04-18T10:54:21.830 回答